¿Cómo puedo personalizar la configuración predeterminada al implementar Google Chrome for Business?


14

Quiero poder implementar Google Chrome for Business en mi organización sin crear accesos directos adicionales y sin avisos de primera ejecución. El instalador de Chrome for Business es un archivo de Windows Installer (MSI), pero es solo una envoltura alrededor de un instalador ejecutable. No tiene propiedades como CreateDesktopShortcut que podrían establecerse en la línea de comando msiexec como lo hacen muchos instaladores de MSI. ¿Cómo puedo personalizar mi instalación? Preferiría no escribir y mantener una secuencia de comandos de instalación.

Respuestas:


24

Google Chrome almacena las preferencias de usuario predeterminadas en un archivo master_preferences . Este es un archivo de texto en formato JSON e incluye un distributionobjeto que contiene configuraciones que se leerán durante la instalación. La edición de este archivo en una instalación existente de Chrome no resuelve el problema porque la instalación obviamente ya se produjo en ese momento. La solución es integrar un archivo master_preferences personalizado en el proceso de instalación de Windows Installer mediante un archivo de transformación. Siga los siguientes pasos para lograr esto.

Reúna los instaladores y herramientas necesarios

  1. Instalador de Google Chrome for Business .
    Descargaré la versión de 64 bits a E:\Chrome for Business 38 (64-bit).
  2. Kit de desarrollo de software (SDK) de Microsoft Windows para Windows 8.1 .
    Lo descargaré a E:\WindowsSDK8.1.
  3. Instalar el SDK de Windows: E:\WindowsSDK8.1.\sdksetup.exe.
  4. Instalar Orca (el editor de la base de datos de Windows Installer):
    msiexec /package "C:\Program Files (x86)\Windows Kits\8.1\bin\x86\Orca-x86_en-us.msi".

Escribir un archivo master_preferences personalizado

  1. Revise la configuración de distribución disponible. Estas son propiedades de un distributionobjeto, que está contenido dentro del objeto anónimo en el archivo master_preferences. La siguiente lista de configuraciones se compiló combinando dos archivos fuente de Chromium: master_preferences_constants.h y master_preferences_constants.cc en / trunk / src / chrome / installer / util / . Tenga en cuenta que lo siguiente no es JSON válido porque no se incluyen valores para las propiedades. Un ejemplo se muestra más abajo.
{
  "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 la configuración de no distribución disponible. Estas configuraciones van fuera del distributionobjeto en el JSON. Se aplican al perfil del usuario cuando un usuario ejecuta Chrome por primera vez. La lista completa de configuraciones está disponible en los archivos fuente Chromium pref_names.h y pref_names.cc en / trunk / src / chrome / common / . La lista es bastante larga, por lo que solo se muestra un subconjunto aquí.
{
// *************** 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. Elija la configuración que desee y escriba su propio archivo de texto master_preferences personalizado. Aquí está el que está integrado en el archivo de Windows Installer (expandido a varias líneas para facilitar la lectura):
{
  "distribution" : 
  {
    "msi" : true,
    "system_level" : true,
    "verbose_logging" : true
  }
}

Debe incluir todas estas propiedades como se muestra en su archivo master_preferences para que el instalador funcione correctamente. Por lo tanto, debe comenzar con esto y agregarlo. Mi archivo se muestra a continuación. La única forma en que encontré para evitar que Chrome le pidiera al usuario que configurara una cuenta de Google fue establecer la first_run_tabspropiedad.

{
  "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. Examinar para http://jslint.com/ , copiar su JSON en el cuadro de origen y haga clic en el botón JSLint. Esto verificará que tienes un buen JSON. Esto es importante porque alimentar JSON con formato incorrecto al instalador producirá resultados inesperados y / o no deseados. Guarde el archivo verificado para referencia futura.

  2. Haga una copia de su JSON verificado y elimine todos los espacios y nuevas líneas. El instalador de Chrome no puede manejar nuevas líneas; incluir nuevas líneas dará como resultado una instalación corrupta que debe eliminarse mediante cirugía de registro y eliminación manual de archivos. Puede que no sea necesario eliminar espacios, pero coincide con lo que hicieron los autores de la configuración con el JSON predeterminado. La mía se muestra a continuación.

{"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. Ejecute el nuevo JSON sin espacios a través de JSLint para asegurarse de que no haya introducido ningún error.

  2. Copie el JSON verificado sin espacios o nuevas líneas en un codificador de URL. Solía URL Encode / Decode en línea . Guarde el JSON codificado para usarlo en el instalador y para referencia futura. Mi JSON codificado se muestra a continuación.

%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

Escribir una transformación del instalador de Windows

  1. Inicia Orca.
  2. Abra el archivo MSI de Chrome for Business descargado como de solo lectura. (Supongo que podría editar el archivo real, pero me gusta usar transformaciones, por lo que siempre tengo el archivo suministrado por el proveedor como base si las cosas salen mal). Descargué Chrome for Business 38 de 64 bits y el nombre del archivo era googlechromestandaloneenterprise64.msi.
  3. En el menú Transformar , seleccione Nueva transformación . Ahora todas las tablas de la base de datos de Windows Installer son editables porque está editando un nuevo archivo de transformación.
  4. Seleccione la tabla de propiedades.
  5. Haga clic derecho en la columna Propiedad y haga clic en "Agregar fila". Establezca la Propiedad en MASTER_PREFERENCESy establezca el Valor en su JSON codificado con URL. Este código se aplicará durante la implementación y el instalador lo guardará como master_preferencesarchivo de instalación.
  6. Seleccione la tabla CustomAction y busque la acción BuildInstallCommand.
  7. Haga doble clic en la celda Destino para la acción BuildInstallCommand para que sea editable.
  8. Cerca del final del texto, elimine el siguiente JSON codificado existente installerdata=y reemplácelo con el nuevo nombre de propiedad entre paréntesis. Asegúrese de conservar las comillas de cierre. Debe tener un aspecto como este: installerdata=[MASTER_PREFERENCES]"
  9. Presione Entrar para terminar de editar la celda.
  10. En el menú Transformar , haga clic en Generar transformación ... y guarde el nuevo archivo MST. Salvé el mío como E:\Chrome for Business 38 (64-bit)\MasterPreferences.mst.
  11. Salir de Orca.

Nota: Es necesario usar una propiedad en lugar de insertar el JSON directamente en la acción personalizada porque el campo Destino de la acción personalizada tiene solo 255 caracteres de longitud . El esquema de esa tabla no se puede cambiar, y la mayoría de los JSON personalizados tomarían la longitud total de ese campo por encima del límite. El uso de una propiedad evita la limitación de longitud, ya que no existe un límite práctico para la longitud de un valor de propiedad.

Instala Chrome con tu transformación

  1. Abra una ventana del símbolo del sistema con privilegios administrativos.
  2. Instala Google Chrome con tu transformación configurando el TRANSFORMS propiedad en su nombre de archivo. Active el registro para ayudarlo a encontrar algo incorrecto. Usando mis carpetas de ejemplo y suponiendo que ha iniciado sesión 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. Si Chrome se instala sin error, intente ejecutarlo como un usuario diferente no administrativo para asegurarse de que la configuración se propague correctamente.
  4. Finalmente, configure su sistema de implementación con el instalador y el archivo de transformación. Yo uso System Center Configuration Manager 2012 R2 . Mi línea de comando para esta aplicación es similar a la siguiente: msiexec /package "googlechromestandaloneenterprise64.msi" /quiet TRANSFORMS="MasterPreferences.mst" /l*v "%TEMP%\ChromeInstallationLog.txt" esto les brinda a mis usuarios una experiencia similar a la de una tienda de aplicaciones con la aplicación Software Center de Configuration Manager, deja el control de los iconos del escritorio y de la barra de tareas únicamente con el usuario y evita experiencias molestas de primera ejecución . Esta es mi experiencia de usuario preferida en general, pero es especialmente útil para computadoras públicas, como en un laboratorio de computadoras, donde los cambios en el disco duro se pierden en cada reinicio, por lo que cada inicio de sesión es el "primer" inicio de sesión.

Notas

Consulte también la documentación de Google en el archivo master_preferences , que cubre un subconjunto de la configuración disponible, pero no le indica cómo obtener la configuración en la máquina durante la instalación.

Gracias a grt@chromium.org por señalar la posibilidad de personalización de MSI . Mi objetivo aquí era ampliar esa información para proporcionar una explicación completa y una solución de ejemplo. Espero que sea útil.


Esta es una excelente guía. Usted es un héroe. :-)
usershmusername

¿Sigue siendo el caso? Soemone en google necesita ser despedido por esto. El registro debería ser "eso", posiblemente tan simple como una entrada de registro que apunta a un nombre de archivo y una ubicación que se puede implementar como un trabajo trivial de 5 minutos en Wix.
TomTom

0

No tengo suficiente representante para publicar un comentario. Estaba usando la guía de Jay para ayudarme con un problema para que un tipo de archivo descargado se ejecute automáticamente. Y esta parece ser la única forma de hacerlo en este momento:

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

-Este enlace se refiere a un error que AFAIK no está solucionado. El reportero desea poder establecer tipos de archivo específicos para que se ejecuten automáticamente en d / l a través de un GPO. El caso de uso para esto es limitado dadas las implicaciones de seguridad, pero a veces es necesario en implementaciones empresariales. Se puede lograr utilizando la técnica de Jay en un .mst con master_preferences. (editar en respuesta al comentario de Chick)

Estoy de acuerdo contigo Tomtom, debería haber una manera más fácil. En su mayor parte, el .admx de Google es suficiente.


Independientemente de la cantidad de representante que tenga: es probable que se elimine una respuesta de solo enlace. ¿Puede hacer que esto tenga sentido como una respuesta en sí misma y solo haga referencia al enlace para aquellos que quieran verificar lo que está diciendo o profundizar? serverfault.com/help/how-to-answer
pollitos
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.