我希望能够在我的组织中部署 Google Chrome for Business,而无需创建任何额外的快捷方式,也不需要任何首次运行提示。Chrome for Business 安装程序是一个 Windows Installer 文件 (MSI),但它只是可执行安装程序的包装器。它没有 CreateDesktopShortcut 等可以在 msiexec 命令行中设置的属性,就像许多 MSI 安装程序一样。我如何自定义安装?我宁愿不编写和维护安装脚本。
答案1
谷歌浏览器将默认用户首选项存储在master_preferences文件. 这是一个文本文件JSON格式,它包含一个distribution
对象,其中包含将在安装过程中读取的设置。在现有的 Chrome 安装中编辑此文件并不能解决问题,因为此时安装显然已经发生。解决方案是将定制的 master_preferences 文件集成到 Windows Installer 安装过程中通过使用转换文件。按照以下步骤完成此操作。
收集所需的安装程序和工具
- Google Chrome for Business 安装程序。
我将下载64位版本到E:\Chrome for Business 38 (64-bit)
。 - 适用于 Windows 8.1 的 Microsoft Windows 软件开发工具包 (SDK)。
我将把这个下载到E:\WindowsSDK8.1
。 - 安装 Windows SDK
E:\WindowsSDK8.1.\sdksetup.exe
:。 - 安装 Orca(Windows Installer 数据库编辑器)
msiexec /package "C:\Program Files (x86)\Windows Kits\8.1\bin\x86\Orca-x86_en-us.msi"
:。
编写自定义的 master_preferences 文件
- 查看可用的分发设置。这些是
distribution
对象的属性,包含在 master_preferences 文件中的匿名对象中。以下设置列表是通过合并两个 Chromium 源文件编译而成的:主首选项常量.h和master_preferences_constants.cc 在/trunk/src/chrome/安装程序/util/。请注意,以下不是有效的 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"
}
}
- 查看可用的非分发设置。这些设置外部JSON 中的对象
distribution
。当用户首次运行 Chrome 时,它们将应用于用户配置文件。完整的设置列表可在 Chromium 源文件中找到首选项名称.h和pref_names.cc在/主干/src/chrome/常见/。该列表相当长,因此这里仅显示一部分。
{
// *************** 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.
- 选择所需的设置,然后编写您自己的自定义 master_preferences 文本文件。以下是内置于 Windows Installer 文件中的文件(为了便于阅读,扩展为多行):
{
"distribution" :
{
"msi" : true,
"system_level" : true,
"verbose_logging" : true
}
}
您必须包含 master_preferences 文件中显示的所有这些属性,以便安装程序正常工作。因此,您应该从此开始并添加。我的文件如下所示。我发现阻止 Chrome 要求用户配置 Google 帐户的唯一方法是设置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
}
}
浏览至http://jslint.com/,将您的 JSON 复制到源框中,然后单击 JSLint 按钮。这将验证您是否拥有良好的 JSON。这很重要,因为将格式错误的 JSON 提供给安装程序会产生意外和/或不理想的结果。保存已验证的文件以供将来参考。
复制已验证的 JSON,并删除所有空格和换行符。Chrome 安装程序无法处理换行符;包含换行符会导致安装损坏,必须通过注册表操作和手动删除文件来删除。删除空格可能不是必要的,但它与安装程序作者对默认 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}}
通过 JSLint 运行不带空格的新 JSON,以确保没有引入任何错误。
将经过验证的 JSON(不带空格或换行符)复制到 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 安装程序转换
- 启动 Orca。
- 以只读方式打开下载的 Chrome for Business MSI 文件。(我想您可以编辑实际文件,但我喜欢使用转换,这样如果出现问题,我始终可以将供应商提供的文件作为基准。)我下载了 Chrome for Business 38 64 位,文件名为
googlechromestandaloneenterprise64.msi
。 - 在转换菜单,选择新变换。现在所有 Windows Installer 数据库表都可编辑,因为您正在编辑一个新的转换文件。
- 选择属性表。
- 右键单击“属性”列,然后单击“添加行”。将属性设置为
MASTER_PREFERENCES
,并将值设置为 URL 编码的 JSON。此代码将在部署期间应用,并由安装程序保存为安装master_preferences
文件。 - 选择 CustomAction 表,并找到 BuildInstallCommand 操作。
- 双击 BuildInstallCommand 操作的目标单元格以使其可编辑。
- 在文本末尾附近,删除以下现有的编码 JSON
installerdata=
,并将其替换为括号中的新属性名称。请务必保留右引号。它应如下所示:installerdata=[MASTER_PREFERENCES]"
- 按 Enter 键完成单元格的编辑。
- 在转换菜单,点击生成变换…并保存新的 MST 文件。我将我的文件保存为
E:\Chrome for Business 38 (64-bit)\MasterPreferences.mst
。 - 退出 Orca。
注意:必须使用属性,而不是将 JSON 直接插入自定义操作,因为自定义操作目标字段长度仅为 255 个字符。该表的架构无法更改,并且大多数自定义 JSON 会使该字段的总长度超过限制。使用属性可以避免长度限制,因为属性值的长度没有实际限制。
使用转换功能安装 Chrome
- 以管理员权限打开命令提示符窗口。
- 通过将
TRANSFORMS
属性设置为文件名来安装 Google Chrome 并进行转换。打开日志记录以帮助您查找任何错误。使用我的示例文件夹并假设您以管理员身份登录: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"
- 如果 Chrome 安装没有错误,请尝试以其他非管理员用户身份运行它,以确保设置正确传播。
- 最后,使用安装程序和转换文件配置部署系统。我使用系统中心配置管理器 2012 R2。我为此应用程序编写的命令行类似于以下内容:
msiexec /package "googlechromestandaloneenterprise64.msi" /quiet TRANSFORMS="MasterPreferences.mst" /l*v "%TEMP%\ChromeInstallationLog.txt"
这为我的用户提供了类似应用商店的体验,使用 Configuration Manager 的软件中心应用程序,将桌面和任务栏图标的控制权完全交给用户,并避免了恼人的首次运行体验。这通常是我喜欢的用户体验,但它对于面向公众的计算机(例如计算机实验室)尤其有用,因为每次重新启动时硬盘驱动器更改都会丢失,因此每次登录都是“第一次”登录。
笔记
另请参阅 Google 的master_preferences 文件的文档,其中涵盖了可用设置的子集,但并未告诉您如何在安装过程中将这些设置传输到机器上。
答案2
我没有足够的声望来发表评论。我使用 Jay 的指南来帮助解决让下载的文件类型自动运行的问题。目前这似乎是唯一的方法:
https://bugs.chromium.org/p/chromium/issues/detail?id=476668
-此链接指向一个据我所知尚未修复的错误。报告者希望能够通过 GPO 设置特定文件类型以在下载时自动运行。考虑到安全隐患,这种做法的使用情况有限,但在企业部署中有时是必要的。可以使用 Jay 的技术在 .mst 中使用 master_preferences 来实现。(编辑以回应 Chick 的评论)
我同意你的观点,Tomtom,应该有更简单的方法。在大多数情况下,Google 的 .admx 就足够了。