Como posso personalizar as configurações padrão ao implantar o Google Chrome for Business?

14

Quero poder implantar o Google Chrome for Business em minha organização sem a criação de nenhum atalho extra e sem nenhum aviso de primeira execução. O instalador do Chrome for Business é um arquivo do Windows Installer (MSI), mas é apenas um invólucro de um instalador executável. Ele não possui propriedades como CreateDesktopShortcut que podem ser definidas na linha de comando msiexec, como muitos instaladores MSI. Como posso personalizar minha instalação? Eu preferiria não escrever e manter um script de instalação.

Jay Michaud
fonte

Respostas:

24

O Google Chrome armazena as preferências padrão do usuário em um arquivo master_preferences . Este é um arquivo de texto no formato JSON e inclui um distributionobjeto que contém configurações que serão lidas durante a instalação. A edição deste arquivo em uma instalação existente do Chrome não resolve o problema, porque a instalação obviamente já ocorreu naquele momento. A solução é integrar um arquivo master_preferences personalizado ao processo de instalação do Windows Installer usando um arquivo de transformação. Siga as etapas a seguir para fazer isso.

Reúna os instaladores e ferramentas necessários

  1. Instalador do Google Chrome for Business .
    Vou baixar a versão de 64 bits para E:\Chrome for Business 38 (64-bit).
  2. Kit de Desenvolvimento de Software (SDK) do Microsoft Windows para Windows 8.1 .
    Vou baixar isso para E:\WindowsSDK8.1.
  3. Instalar o Windows SDK: E:\WindowsSDK8.1.\sdksetup.exe.
  4. Instalar Orca (o editor de banco de dados Windows Installer):
    msiexec /package "C:\Program Files (x86)\Windows Kits\8.1\bin\x86\Orca-x86_en-us.msi".

Escreva um arquivo master_preferences personalizado

  1. Revise as configurações de distribuição disponíveis. Essas são propriedades de um distributionobjeto, que estão contidas no objeto anônimo no arquivo master_preferences. A seguinte lista de definições foi compilado através da combinação de dois arquivos de origem Cromo: master_preferences_constants.h e master_preferences_constants.cc em / trunk / src / cromo / instalador / util / . Observe que o seguinte não é JSON válido porque nenhum valor está incluído para as propriedades. Um exemplo é mostrado mais abaixo.
{
  "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. Revise as configurações de não distribuição disponíveis. Estas definições ir fora do distributionobjeto no JSON. Eles são aplicados ao perfil do usuário quando um usuário executa o Chrome pela primeira vez. A lista completa de configurações está disponível nos arquivos de origem Cromo pref_names.h e pref_names.cc em / trunk / src / cromo / / comum . A lista é bastante longa, portanto, apenas um subconjunto é mostrado aqui.
{
// *************** 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. Escolha as configurações desejadas e escreva seu próprio arquivo de texto master_preferences personalizado. Aqui está o que está embutido no arquivo do Windows Installer (expandido para várias linhas para facilitar a leitura):
{
  "distribution" : 
  {
    "msi" : true,
    "system_level" : true,
    "verbose_logging" : true
  }
}

Você deve incluir todas essas propriedades, conforme mostrado no arquivo master_preferences, para que o instalador funcione corretamente. Portanto, você deve começar com isso e adicionar a ele. Meu arquivo é mostrado abaixo. A única maneira que encontrei para impedir que o Chrome pedisse ao usuário para configurar uma conta do Google era definir a first_run_tabspropriedade.

{
  "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. Navegue para http://jslint.com/ , copie seu JSON na caixa Origem e clique no botão JSLint. Isso verificará se você possui um bom JSON. Isso é importante, porque a alimentação de JSON malformado para o instalador produzirá resultados inesperados e / ou indesejados. Salve o arquivo verificado para referência futura.

  2. Faça uma cópia do seu JSON verificado e remova todos os espaços e novas linhas. O instalador do Chrome não pode lidar com novas linhas; A inclusão de novas linhas resultará em uma instalação corrompida que deverá ser removida através de cirurgia no registro e exclusão manual de arquivos. A remoção de espaços pode não ser necessária, mas corresponde ao que os autores da configuração fizeram com o JSON padrão. O meu é mostrado abaixo.

{"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. Execute o novo JSON sem espaços por meio do JSLint para garantir que você não introduziu nenhum erro.

  2. Copie o JSON verificado sem espaços ou novas linhas em um codificador de URL. Eu usei o URL Encode / Decode Online . Salve o JSON codificado para uso no instalador e para referência futura. Meu JSON codificado é mostrado abaixo.

%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

Escreva uma transformação do Windows Installer

  1. Inicie o Orca.
  2. Abra o arquivo MSI do Chrome for Business baixado como somente leitura. (Suponho que você possa editar o arquivo real, mas eu gosto de usar transformações, para que eu sempre tenha o arquivo fornecido pelo fornecedor como uma linha de base, se tudo der errado.) Fiz o download do Chrome for Business 38 de 64 bits e o nome do arquivo era googlechromestandaloneenterprise64.msi.
  3. No menu Transformar , selecione Nova transformação . Agora todas as tabelas de banco de dados do Windows Installer são editáveis ​​porque você está editando um novo arquivo de transformação.
  4. Selecione a tabela de propriedades.
  5. Clique com o botão direito do mouse na coluna Propriedade e clique em "Adicionar Linha". Defina a propriedade como MASTER_PREFERENCESe defina o valor como seu JSON codificado em URL. Este código será aplicado durante a implantação e salvo como o master_preferencesarquivo da instalação pelo instalador.
  6. Selecione a tabela CustomAction e localize a ação BuildInstallCommand.
  7. Clique duas vezes na célula Destino para a ação BuildInstallCommand para torná-la editável.
  8. Perto do final do texto, exclua o seguinte JSON codificado existente installerdata=e substitua-o pelo novo nome da propriedade entre colchetes. Certifique-se de manter as aspas finais. Deve ficar assim: installerdata=[MASTER_PREFERENCES]"
  9. Pressione Enter para concluir a edição da célula.
  10. No menu Transform , clique em Generate Transform… e salve o novo arquivo MST. Eu salvei o meu como E:\Chrome for Business 38 (64-bit)\MasterPreferences.mst.
  11. Saia do Orca.

Nota: É necessário usar uma propriedade em vez de inserir o JSON diretamente na ação customizada porque o campo Destino da ação customizada possui apenas 255 caracteres . O esquema dessa tabela não pode ser alterado e a maioria dos JSON customizados levaria o comprimento total desse campo acima do limite. O uso de uma propriedade evita a limitação de comprimento, pois não há limite prático para o comprimento de um valor de propriedade.

Instale o Chrome com sua transformação

  1. Abra uma janela do prompt de comando com privilégios administrativos.
  2. Instale o Google Chrome com sua transformação, definindo a TRANSFORMSpropriedade como seu nome de arquivo. Ative o log para ajudá-lo a encontrar algo errado. Usando minhas pastas de exemplo e supondo que você esteja logado como Administrador: 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. Se o Chrome for instalado sem erros, tente executá-lo como um usuário não administrativo diferente para garantir que as configurações sejam propagadas corretamente.
  4. Por fim, configure seu sistema de implementação com o instalador e o arquivo de transformação. Eu uso o System Center Configuration Manager 2012 R2 . Minha linha de comando para este aplicativo é semelhante à seguinte: msiexec /package "googlechromestandaloneenterprise64.msi" /quiet TRANSFORMS="MasterPreferences.mst" /l*v "%TEMP%\ChromeInstallationLog.txt" Isso proporciona aos meus usuários uma experiência de loja de aplicativos com o aplicativo Software Center do Configuration Manager, deixa o controle dos ícones da área de trabalho e da barra de tarefas apenas com o usuário e evita experiências irritantes de primeira execução. . Essa é minha experiência preferida do usuário em geral, mas é especialmente útil para computadores públicos, como em um laboratório de informática, onde as alterações no disco rígido são perdidas a cada reinicialização e, portanto, todo logon é o "primeiro" logon.

Notas

Consulte também a documentação do Google no arquivo master_preferences , que abrange um subconjunto das configurações disponíveis, mas não informa como obter as configurações na máquina durante a instalação.

Agradecemos a [email protected] por apontar a possibilidade de personalização do MSI . Meu objetivo aqui era expandir essas informações para fornecer uma explicação abrangente e uma solução de exemplo. Espero que seja útil.

Jay Michaud
fonte
Este é um excelente guia. Você é um herói. :-)
usershmusername
Ainda é o caso? Soemone no google precisa ser demitido para isso. O registro deve ser "it" - possivelmente tão simples quanto uma entrada de registro apontando para um nome de arquivo e local que pode ser implementado como um trabalho trivial de 5 minutos no Wix.
TomTom
0

Não tenho representante suficiente para postar um comentário. Eu estava usando o guia de Jay para ajudar com um problema ao fazer com que um tipo de arquivo baixado fosse executado automaticamente. E esta parece ser a única maneira de fazê-lo no momento:

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

-Este link se refere a um bug que o AFAIK não está corrigido. O repórter gostaria de poder definir tipos de arquivos específicos para serem executados automaticamente em d / l por meio de um GPO. O caso de uso para isso é limitado, dadas as implicações de segurança, mas às vezes necessário em implantações corporativas. Isso pode ser alcançado usando a técnica de Jay em um .mst com master_preferences. (editar em resposta ao comentário de Chick)

Eu concordo com você Tomtom, deve haver uma maneira mais fácil. Na maioria das vezes, o .admx do Google é suficiente.

usershmusername
fonte
Independentemente da quantidade de representantes que você possui: é provável que uma resposta apenas ao link seja excluída. Você pode fazer isso fazer sentido como uma resposta por si só e apenas referenciar o link para aqueles que desejam verificar o que está dizendo ou se aprofundar. serverfault.com/help/how-to-answer
chicks