Comment personnaliser les paramètres par défaut lors du déploiement de Google Chrome for Business?

14

Je souhaite pouvoir déployer Google Chrome for Business dans mon organisation sans qu'aucun raccourci supplémentaire ne soit créé et sans invites de première exécution. Le programme d'installation de Chrome for Business est un fichier Windows Installer (MSI), mais il s'agit simplement d'un wrapper autour d'un programme d'installation exécutable. Il n'a pas de propriétés telles que CreateDesktopShortcut qui pourraient être définies sur la ligne de commande msiexec comme le font de nombreux installateurs MSI. Comment personnaliser mon installation? Je préférerais ne pas écrire et maintenir un script d'installation.

Jay Michaud
la source

Réponses:

24

Google Chrome stocke les préférences utilisateur par défaut dans un fichier master_preferences . Il s'agit d'un fichier texte au format JSON , et il comprend un distributionobjet contenant des paramètres qui seront lus lors de l'installation. La modification de ce fichier dans une installation Chrome existante ne résout pas le problème, car l'installation s'est manifestement déjà produite à ce stade. La solution consiste à intégrer un fichier master_preferences personnalisé dans le processus d'installation de Windows Installer à l'aide d'un fichier de transformation. Suivez les étapes suivantes pour y parvenir.

Rassemblez les programmes d'installation et les outils requis

  1. Programme d'installation de Google Chrome for Business .
    Je vais télécharger la version 64 bits sur E:\Chrome for Business 38 (64-bit).
  2. Kit de développement logiciel (SDK) Microsoft Windows pour Windows 8.1 .
    Je vais le télécharger sur E:\WindowsSDK8.1.
  3. Installez Windows SDK: E:\WindowsSDK8.1.\sdksetup.exe.
  4. Installer Orca (l'éditeur de base de données Windows Installer):
    msiexec /package "C:\Program Files (x86)\Windows Kits\8.1\bin\x86\Orca-x86_en-us.msi".

Écrire un fichier master_preferences personnalisé

  1. Passez en revue les paramètres de distribution disponibles. Ce sont les propriétés d'un distributionobjet, qui sont contenues dans l'objet anonyme dans le fichier master_preferences. La liste de paramètres suivante a été compilée en combinant deux fichiers source Chromium: master_preferences_constants.h et master_preferences_constants.cc dans / trunk / src / chrome / installer / util / . Notez que ce qui suit n'est pas un JSON valide car aucune valeur n'est incluse pour les propriétés. Un exemple est présenté ci-dessous.
{
  "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. Vérifiez les paramètres de non-distribution disponibles. Ces paramètres vont en dehors de l' distributionobjet dans le JSON. Ils sont appliqués au profil utilisateur lorsqu'un utilisateur exécute Chrome pour la première fois. La liste complète des paramètres est disponible dans les fichiers source Chromium pref_names.h et pref_names.cc dans / trunk / src / chrome / common / . La liste est assez longue, donc seul un sous-ensemble est affiché ici.
{
// *************** 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. Choisissez les paramètres souhaités et écrivez votre propre fichier texte master_preferences personnalisé. Voici celui qui est intégré au fichier Windows Installer (développé sur plusieurs lignes pour plus de lisibilité):
{
  "distribution" : 
  {
    "msi" : true,
    "system_level" : true,
    "verbose_logging" : true
  }
}

Vous devez inclure toutes ces propriétés comme indiqué dans votre fichier master_preferences pour que le programme d'installation fonctionne correctement. Par conséquent, vous devez commencer par cela et y ajouter. Mon fichier est présenté ci-dessous. Le seul moyen que j'ai trouvé pour empêcher Chrome de demander à l'utilisateur de configurer un compte Google était de définir la first_run_tabspropriété.

{
  "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. Accédez à http://jslint.com/ , copiez votre JSON dans la zone Source et cliquez sur le bouton JSLint. Cela vérifiera que vous disposez d'un bon JSON. Ceci est important, car l'alimentation de JSON malformé au programme d'installation donnera des résultats inattendus et / ou indésirables. Enregistrez le fichier vérifié pour référence future.

  2. Faites une copie de votre JSON vérifié et supprimez tous les espaces et les nouvelles lignes. Le programme d'installation de Chrome ne peut pas gérer les nouvelles lignes; y compris les sauts de ligne entraînera une installation corrompue qui doit être supprimée via la chirurgie du registre et la suppression manuelle des fichiers. La suppression d'espaces n'est peut-être pas nécessaire, mais elle correspond à ce que les auteurs de la configuration ont fait avec le JSON par défaut. Le mien est illustré ci-dessous.

{"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. Exécutez le nouveau JSON sans espaces via JSLint pour vous assurer que vous n'avez introduit aucune erreur.

  2. Copiez le JSON vérifié sans espaces ni sauts de ligne dans un encodeur d'URL. J'ai utilisé URL Encode / Decode Online . Enregistrez le JSON codé pour l'utiliser dans le programme d'installation et pour référence future. Mon JSON encodé est illustré ci-dessous.

%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

Écrire une transformation Windows Installer

  1. Démarrez Orca.
  2. Ouvrez le fichier MSI Chrome for Business téléchargé en lecture seule. (Je suppose que vous pouvez modifier le fichier réel, mais j'aime utiliser les transformations, donc j'ai toujours le fichier fourni par le fournisseur comme base de référence si les choses tournent mal.) J'ai téléchargé Chrome for Business 38 64 bits, et le nom de fichier était googlechromestandaloneenterprise64.msi.
  3. Dans le menu Transformer , sélectionnez Nouvelle transformation . Désormais, toutes les tables de la base de données Windows Installer sont modifiables car vous modifiez un nouveau fichier de transformation.
  4. Sélectionnez la table des propriétés.
  5. Faites un clic droit dans la colonne Propriété et cliquez sur "Ajouter une ligne". Définissez la propriété sur MASTER_PREFERENCESet définissez la valeur sur votre JSON codé URL. Ce code sera appliqué lors du déploiement et enregistré en tant que master_preferencesfichier d' installation par le programme d'installation.
  6. Sélectionnez la table CustomAction et recherchez l'action BuildInstallCommand.
  7. Double-cliquez sur la cellule cible de l'action BuildInstallCommand pour la rendre modifiable.
  8. Vers la fin du texte, supprimez le JSON codé existant suivant installerdata=et remplacez-le par le nouveau nom de propriété entre crochets. Assurez-vous de conserver le guillemet de fermeture. Ça devrait ressembler à ça: installerdata=[MASTER_PREFERENCES]"
  9. Appuyez sur Entrée pour terminer la modification de la cellule.
  10. Dans le menu Transformer , cliquez sur Générer la transformation… et enregistrez le nouveau fichier MST. J'ai sauvé le mien comme E:\Chrome for Business 38 (64-bit)\MasterPreferences.mst.
  11. Quittez Orca.

Remarque: Il est nécessaire d'utiliser une propriété plutôt que d'insérer le JSON directement dans l'action personnalisée car le champ cible de l'action personnalisée ne comporte que 255 caractères . Le schéma de cette table ne peut pas être modifié et la plupart des JSON personnalisés prendraient la longueur totale de ce champ au-dessus de la limite. L'utilisation d'une propriété évite la limitation de longueur, car il n'y a pas de limite pratique à la longueur d'une valeur de propriété.

Installez Chrome avec votre transformation

  1. Ouvrez une fenêtre d'invite de commandes avec des privilèges administratifs.
  2. Installez Google Chrome avec votre transformation en définissant la TRANSFORMSpropriété sur son nom de fichier. Activez la journalisation pour vous aider à trouver un problème. En utilisant mes exemples de dossiers et en supposant que vous êtes connecté en tant qu'administrateur: 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 s'installe sans erreur, essayez de l'exécuter en tant qu'utilisateur différent et non administrateur pour vous assurer que les paramètres se propagent correctement.
  4. Enfin, configurez votre système de déploiement avec le fichier d'installation et de transformation. J'utilise System Center Configuration Manager 2012 R2 . Ma ligne de commande pour cette application est similaire à la suivante: msiexec /package "googlechromestandaloneenterprise64.msi" /quiet TRANSFORMS="MasterPreferences.mst" /l*v "%TEMP%\ChromeInstallationLog.txt" cela donne à mes utilisateurs une expérience de type app-store avec l'application Software Center de Configuration Manager, laisse le contrôle des icônes du bureau et de la barre des tâches uniquement à l'utilisateur et évite les expériences ennuyeuses de première exécution . Il s'agit de mon expérience utilisateur préférée en général, mais elle est particulièrement utile pour les ordinateurs accessibles au public, comme dans un laboratoire informatique, où les modifications du disque dur sont perdues à chaque redémarrage, et donc chaque connexion est la «première» connexion.

Remarques

Voir également la documentation de Google sur le fichier master_preferences , qui couvre un sous-ensemble des paramètres disponibles, mais ne vous dit pas comment obtenir les paramètres sur la machine pendant l'installation.

Merci à [email protected] d' avoir souligné la possibilité de personnalisation MSI . Mon objectif ici était de développer ces informations pour fournir une explication complète et un exemple de solution. J'espère que c'est utile.

Jay Michaud
la source
Ceci est un excellent guide. Vous êtes un héros. :-)
usershmusername
Toujours le cas? Soemone sur google doit être viré pour cela. Le registre devrait être "il" - peut-être aussi simple qu'une entrée de registre pointant vers un nom de fichier et un emplacement qui peuvent être déployés comme un travail trivial de 5 minutes dans Wix.
TomTom
0

Je n'ai pas assez de représentant pour poster un commentaire. J'utilisais le guide de Jay pour résoudre un problème lors de l'exécution automatique d'un type de fichier téléchargé. Et cela semble être la seule façon de le faire pour le moment:

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

-Ce lien fait référence à un bug qui AFAIK n'est pas corrigé. Le journaliste aimerait pouvoir définir des types de fichiers spécifiques pour qu'ils s'exécutent automatiquement sur d / l via un GPO. Le cas d'utilisation est limité compte tenu des implications en matière de sécurité, mais parfois nécessaire dans les déploiements d'entreprise. Il peut être réalisé en utilisant la technique de Jay dans un .mst avec master_preferences. (modifier en réponse au commentaire de Chick)

Je suis d'accord avec toi Tomtom, il devrait y avoir un moyen plus simple. Dans la plupart des .admx de Google est suffisant.

usershmusername
la source
Quel que soit le nombre de représentants dont vous disposez: une réponse de lien uniquement est susceptible d'être supprimée. Pouvez-vous donner un sens à cette réponse en tant que réponse et référencer simplement le lien pour ceux qui veulent vérifier ce que vous dites ou approfondir. serverfault.com/help/how-to-answer
poussins