如何在部署Google Chrome for Business时自定义默认设置?

我希望能够在我的组织中部署Google Chrome for Business,而无需创build任何额外的快捷方式,也无需任何首次运行提示。 Chrome for Business安装程序是Windows安装程序文件(MSI),但它只是可执行安装程序的包装。 它没有像MSI安装程序那样可以在msiexec命令行中设置的诸如CreateDesktopShortcut之类的属性。 我如何定制我的安装? 我不想编写和维护安装脚本。

Google Chrome 将默认用户首选项存储在master_preferences文件中 。 这是一个JSON格式的文本文件,它包含一个distribution对象,其中包含将在安装过程中读取的设置。 在现有的Chrome安装中编辑此文件并不能解决问题,因为安装显然已经发生在这一点上。 解决scheme是使用转换文件将定制的master_preferences文件集成到Windows Installer安装过程中 。 采取以下步骤来完成这一点。

收集所需的安装程序和工具

  1. Google Chrome for Business安装程序 。
    我将下载64位版本到E:\Chrome for Business 38 (64-bit)
  2. 用于Windows 8.1的Microsoft Windows软件开发工具包(SDK) 。
    我将下载到E:\WindowsSDK8.1
  3. 安装Windows SDK: E:\WindowsSDK8.1.\sdksetup.exe
  4. 安装Orca(Windows安装程序数据库编辑器):
    msiexec /package "C:\Program Files (x86)\Windows Kits\8.1\bin\x86\Orca-x86_en-us.msi"

编写一个定制的master_preferences文件

  1. 查看可用的分配设置。 这些是distribution对象的属性,它包含在master_preferences文件中的匿名对象中。 以下设置列表是通过组合两个Chromium源文件进行编译的: master_preferences_constants.h和/ trunk / src / chrome / installer / util /中的 master_preferences_constants.cc 。 请注意,以下内容不是有效的JSON,因为属性中不包含任何值。 下面进一步显示了一个例子。
 { "distribution" : { // All the preferences below are expected to be inside the JSON "distribution" // block (as shown here). Some of them also have equivalent command line option. // If same option is specified in master preference as well as command line, // the command line value takes precedence. // Boolean. Use alternate text for the shortcut. Cmd line override present. "alternate_shortcut_text" // Boolean. Whether to instruct the installer to auto-launch chrome on computer // startup. The default (if not provided) is |false|. "auto_launch_chrome" // Boolean. This is to be a Chrome install. (When using MultiInstall) "chrome" // Boolean. This is to be a Chrome App Host install. "app_host" // TODO(huangs): Remove by M27. // Boolean. This is to be a Chrome App Launcher install. "app_launcher" // Integer. Icon index from chrome.exe to use for shortcuts. "chrome_shortcut_icon_index" // Boolean. This is a legacy preference and should no longer be used; it is // kept around so that old master_preferences which specify // "create_all_shortcuts":false still enforce the new // "do_not_create_(desktop|quick_launch)_shortcut" preferences. Setting this to // true no longer has any impact. "create_all_shortcuts" // Boolean pref that disables all logging. "disable_logging" // Name of the dictionary that holds the distribution values. "distribution" // Boolean pref that triggers silent import of the default browser bookmarks. "import_bookmarks" // String pref that triggers silent import of bookmarks from the html file at // given path. "import_bookmarks_from_file" // Boolean pref that triggers silent import of the default browser history. "import_history" // Boolean pref that triggers silent import of the default browser homepage. "import_home_page" // Boolean pref that triggers silent import of the default search engine. "import_search_engine" // Integer. RLZ ping delay in seconds. "ping_delay" // String of Chrome version for which the "set as default browser" infobar will // never be shown. "suppress_default_browser_prompt_for_version" // Boolean. Do not show first run bubble, even if it would otherwise be shown. "suppress_first_run_bubble" // Boolean. Prevent creation of all shortcuts to chrome, including the // desktop, quick launch, taskbar and the start menu shortcuts. "do_not_create_any_shortcuts" // Boolean. Prevent creation of the Desktop shortcut on install (and later on // Active Setup for each user on a system-level install). "do_not_create_desktop_shortcut" // Boolean. Prevent creation of the Quick Launch shortcut on install (and later // on Active Setup for each user on a system-level install). "do_not_create_quick_launch_shortcut" // Boolean. Prevent creation of the Taskbar (since Windows 7) shortcut on // install (and later on Active Setup for each user on a system-level install). "do_not_create_taskbar_shortcut" // Boolean. Do not launch Chrome after first install. Cmd line override present. "do_not_launch_chrome" // Boolean. Do not register with Google Update to have Chrome launched after // install. Cmd line override present. "do_not_register_for_update_launch" // String. Specifies the file path to write logging info to. "log_file" // Boolean. Register Chrome as default browser. Cmd line override present. "make_chrome_default" // Boolean. Register Chrome as default browser for the current user. "make_chrome_default_for_user" // Boolean. Expect to be run by an MSI installer. Cmd line override present. "msi" // Boolean. Support installing multiple products at once. "multi_install" // Boolean. Show EULA dialog before install. "require_eula" // Boolean. Indicates that the first-run 'set-as-default' dialog should not be // shown. Relevant in Windows 8+ context only. If this is true, the standard // 'set default browser' prompt on the butter-bar will appear during the first // run. "suppress_first_run_default_browser_prompt" // Boolean. Install Chrome to system wise location. Cmd line override present. "system_level" // Boolean. Run installer in verbose mode. Cmd line override present. "verbose_logging" // Name of the block that contains the extensions on the master preferences. "extensions.settings" } } 
  1. 查看可用的非分配设置。 这些设置在JSON的distribution对象之外 。 当用户第一次运行Chrome时,它们将应用于用户configuration文件。 在/ trunk / src / chrome / common /中的Chromium源文件pref_names.h和pref_names.cc中提供了完整的设置列表。 该列表相当长,所以这里只显示一个子集。
 { // *************** PROFILE PREFS *************** // These are attached to the user profile // A string property indicating whether default apps should be installed // in this profile. Use the value "install" to enable defaults apps, or // "noinstall" to disable them. This property is usually set in the // master_preferences and copied into the profile preferences on first run. // Defaults apps are installed only when creating a new profile. "default_apps" // If set to true profiles are created in ephemeral mode and do not store their // data in the profile folder on disk but only in memory. "profile.ephemeral_mode" // A boolean specifying whether the New Tab page is the home page or not. "homepage_is_newtabpage" // This is the URL of the page to load when opening new tabs. "homepage" // An integer pref. Holds one of several values: // 0: (deprecated) open the homepage on startup. // 1: restore the last session. // 2: this was used to indicate a specific session should be restored. It is // no longer used, but saved to avoid conflict with old preferences. // 3: unused, previously indicated the user wants to restore a saved session. // 4: restore the URLs defined in kURLsToRestoreOnStartup. // 5: open the New Tab Page on startup. "session.restore_on_startup" // The URLs to restore on startup or when the home button is pressed. The URLs // are only restored on startup if kRestoreOnStartup is 4. "session.startup_urls" // Boolean that is true when SafeBrowsing is enabled. "safebrowsing.enabled" // Boolean that tell us whether malicious download feedback is enabled. "safebrowsing.extended_reporting_enabled" /* Might be useful for highly-secure workstations. */ // Enum that specifies whether Incognito mode is: // 0 - Enabled. Default behaviour. Default mode is available on demand. // 1 - Disabled. Used cannot browse pages in Incognito mode. // 2 - Forced. All pages/sessions are forced into Incognito. "incognito.mode_availability" // Boolean that is true when Suggest support is enabled. "search.suggest_enabled" // A boolean pref set to true if a Home button to open the Home pages should be // visible on the toolbar. "browser.show_home_button" // Boolean that indicates whether we should check if we are the default browser // on start-up. "browser.check_default_browser" // Policy setting whether default browser check should be disabled and default // browser registration should take place. "browser.default_browser_setting_enabled" // Boolean that specifies whether to import bookmarks from the default browser // on first run. "import_bookmarks" // Boolean that specifies whether to import the browsing history from the // default browser on first run. "import_history" // Boolean that specifies whether to import the homepage from the default // browser on first run. "import_home_page" // Boolean that specifies whether to import the search engine from the default // browser on first run. "import_search_engine" // Boolean that specifies whether to import the saved passwords from the default // browser on first run. "import_saved_passwords" // Boolean that specifies if the sign in promo is allowed to show on first run. // This preference is specified in the master preference file to suppress the // sign in promo for some installations. "sync_promo.show_on_first_run_allowed" // *************** LOCAL STATE *************** // These are attached to the machine/installation // Note: Both settings included below are for Windows only. // Whether downloaded PDFs should be opened in Adobe Acrobat Reader. "download.open_pdf_in_adobe_reader" // Preference to be used while relaunching Chrome. This preference dictates if // Chrome should be launched in Metro or Desktop mode. // For more info take a look at ChromeRelaunchMode enum. "relaunch.mode" // Boolean that specifies if the sign in promo is allowed to show on first run. // This preference is specified in the master preference file to suppress the // sign in promo for some installations. "sync_promo.show_on_first_run_allowed"; // Boolean that specifies if we should show a bubble in the new tab page. // The bubble is used to confirm that the user is signed into sync. "sync_promo.show_ntp_bubble"; // As part of the master preferences an optional section indicates the tabs // to open during first run. An example is the following: "first_run_tabs": [ "http://google.com/f1", "https://google.com/f2" ] // Note that the entries are usually urls but they don't have to be. 
  1. select你想要的设置,并编写自己的自定义master_preferences文本文件。 以下是内置于Windows Installer文件中的内容(为了便于阅读,扩展为多行):
 { "distribution" : { "msi" : true, "system_level" : true, "verbose_logging" : true } } 

您必须包含master_preferences文件中显示的所有这些属性,以便安装程序正常工作。 因此,你应该从这个开始,并添加到它。 我的文件如下所示。 我发现阻止Chrome询问用户configurationGoogle帐户的唯一方法是设置first_run_tabs属性。

 { "browser" : { "check_default_browser" : false }, "distribution" : { "import_bookmarks" : false, "import_history" : false, "import_home_page" : false, "import_search_engine" : false, "suppress_first_run_bubble" : true, "do_not_create_desktop_shortcut" : true, "do_not_create_quick_launch_shortcut" : true, "do_not_create_taskbar_shortcut" : true, "do_not_launch_chrome" : true, "do_not_register_for_update_launch" : true, "make_chrome_default" : false, "make_chrome_default_for_user" : false, "msi" : true, "require_eula" : false, "suppress_first_run_default_browser_prompt" : true, "system_level" : true, "verbose_logging" : true }, "first_run_tabs" : [ "chrome://newtab" ], "homepage" : "chrome://newtab", "homepage_is_newtabpage" : true, "sync_promo" : { "show_on_first_run_allowed" : false } } 
  1. 浏览到http://jslint.com/ ,将您的JSON复制到源框中,然后单击JSLintbutton。 这将validation你有良好的JSON。 这很重要,因为向安装程序馈送格式错误的JSON会产生意想不到的结果。 保存已validation的文件以供将来参考。

  2. 制作已validation的JSON的副本,并删除所有的空格和新行。 Chrome安装程序无法处理换行符; 包括换行符将导致安装损坏,必须通过registry手动和手动删除文件来删除。 删除空格可能不是必要的,但它与安装程序作者用默认的JSON匹配。 我的如下所示。

 {"browser":{"check_default_browser":false},"distribution":{"import_bookmarks":false,"import_history":false,"import_home_page":false,"import_search_engine":false,"suppress_first_run_bubble":true,"do_not_create_desktop_shortcut":true,"do_not_create_quick_launch_shortcut":true,"do_not_create_taskbar_shortcut":true,"do_not_launch_chrome":true,"do_not_register_for_update_launch":true,"make_chrome_default":false,"make_chrome_default_for_user":false,"msi":true,"require_eula":false,"suppress_first_run_default_browser_prompt":true,"system_level":true,"verbose_logging":true},"first_run_tabs":["chrome://newtab"],"homepage":"chrome://newtab","homepage_is_newtabpage":true,"sync_promo":{"show_on_first_run_allowed":false}} 
  1. 通过JSLint运行不带空格的新JSON,以确保您没有引入任何错误。

  2. 将不带空格或换行符的已validationJSON复制到URL编码器中。 我使用URL编码/解码在线 。 保存编码的JSON以便在安装程序中使用并供将来参考。 我编码的JSON如下所示。

 %7B%22browser%22%3A%7B%22check_default_browser%22%3Afalse%7D%2C%22distribution%22%3A%7B%22import_bookmarks%22%3Afalse%2C%22import_history%22%3Afalse%2C%22import_home_page%22%3Afalse%2C%22import_search_engine%22%3Afalse%2C%22suppress_first_run_bubble%22%3Atrue%2C%22do_not_create_desktop_shortcut%22%3Atrue%2C%22do_not_create_quick_launch_shortcut%22%3Atrue%2C%22do_not_create_taskbar_shortcut%22%3Atrue%2C%22do_not_launch_chrome%22%3Atrue%2C%22do_not_register_for_update_launch%22%3Atrue%2C%22make_chrome_default%22%3Afalse%2C%22make_chrome_default_for_user%22%3Afalse%2C%22msi%22%3Atrue%2C%22require_eula%22%3Afalse%2C%22suppress_first_run_default_browser_prompt%22%3Atrue%2C%22system_level%22%3Atrue%2C%22verbose_logging%22%3Atrue%7D%2C%22first_run_tabs%22%3A%5B%22chrome%3A%2F%2Fnewtab%22%5D%2C%22homepage%22%3A%22chrome%3A%2F%2Fnewtab%22%2C%22homepage_is_newtabpage%22%3Atrue%2C%22sync_promo%22%3A%7B%22show_on_first_run_allowed%22%3Afalse%7D%7D 

编写Windows安装程序转换

  1. 开始逆戟鲸
  2. 以只读方式打开已下载的Chrome for Business MSI文件。 (我想你可以编辑实际的文件,但我喜欢使用转换,所以如果出现问题,我总是会将供应商提供的文件作为基准)。我下载了Chrome 64位商业版,文件googlechromestandaloneenterprise64.msi
  3. 变换菜单上,select新变换 。 现在,所有Windows Installer数据库表都是可编辑的,因为您正在编辑新的转换文件。
  4. select属性表。
  5. 右键单击“属性”列,然后单击“添加行”。 将该属性设置为MASTER_PREFERENCES ,并将该值设置为您的URL编码的JSON。 此代码将在部署过程中应用,并由安装程序保存为安装的master_preferences文件。
  6. selectCustomAction表,并findBuildInstallCommand操作。
  7. 双击BuildInstallCommand操作的目标单元格以使其可编辑。
  8. 在文本的结尾处,删除installerdata=之后的现有编码JSON,并将其replace为括号中的新属性名称。 请务必保留收盘引号。 它应该看起来像这样: installerdata=[MASTER_PREFERENCES]"
  9. 按Enter完成编辑单元格。
  10. 变换菜单上,单击生成变换…并保存新的MST文件。 我将其保存为E:\Chrome for Business 38 (64-bit)\MasterPreferences.mst
  11. 退出逆戟鲸。

注:有必要使用属性,而不是直接将JSON插入到自定义操作中,因为自定义操作“目标”字段仅为255个字符 。 该表的架构不能改变,大多数自定义的JSON会占用该字段的总长度超过限制。 使用属性避免了长度限制,因为对属性值的长度没有实际的限制。

使用您的转换安装Chrome

  1. 使用pipe理权限打开命令提示符窗口。
  2. 通过将TRANSFORMS属性设置为文件名来安装Google Chrome。 打开日志logging以帮助您find任何错误。 使用示例文件夹并假设您以pipe理员身份login: msiexec /package "E:\Chrome for Business 38 (64-bit)\googlechromestandaloneenterprise64.msi" TRANSFORMS="E:\Chrome for Business 38 (64-bit)\MasterPreferences.mst" /l*v "C:\Users\Administrator\Desktop\ChromeInstallationLog.txt"
  3. 如果Chrome安装时没有错误,请尝试将其作为另一个非pipe理用户运行,以确保设置正确传播。
  4. 最后,使用安装程序和转换文件configuration您的部署系统。 我使用System Center Configuration Manager 2012 R2 。 我的这个应用程序的命令行类似于以下内容: msiexec /package "googlechromestandaloneenterprise64.msi" /quiet TRANSFORMS="MasterPreferences.mst" /l*v "%TEMP%\ChromeInstallationLog.txt"这给我的用户一个应用程序商店使用configurationpipe理器的软件中心应用程序的经验,将桌面和任务栏图标的控制权仅留给用户,避免了令人讨厌的首次运行体验。 这是我的首选用户体验,但对于面向公众的计算机尤其有用,例如在计算机实验室中,每次重新启动时硬盘驱动器的更改都会丢失,因此每次login都是“第一次”login。

笔记

另请参阅Google 关于master_preferences文件的文档 ,其中介绍了可用设置的子集,但并未告诉您如何在安装期间将设置置于计算机上。

感谢[email protected]指出MSI定制的可能性 。 我的目标是扩展这些信息,提供全面的解释和解决scheme。 我希望这是有帮助的。

我没有足够的代表发表评论。 我正在使用杰伊的指导来帮助一个问题得到一个下载的文件types自动运行。 而这似乎是目前唯一的方法:

https://bugs.chromium.org/p/chromium/issues/detail?id=476668

这个链接指的是AFAIK没有修复的bug。 记者希望能够通过GPO设置特定的文件types以d / l自动运行。 这个用例在安全性方面是有限的,但在企业部署中有时是必需的。 这可以通过在master.preferences中使用Jay的技术来实现。 (编辑回应小鸡的评论)

我赞同你Tomtom,应该有一个更简单的方法。 在大多数情况下,Google的.admx就足够了。