Google Chrome Extensions
I have Google Chrome packaged (snapshotted the MSI, but that's another story) and want to get an extension (JSONView) preinstalled for the users in our environment who aren't able to install via the chrome web store due to firewall restrictions within our corporate network.
http://dev.chromium.org/administrators/pre-installed-extensions has 3 documented methods of doing this but I have problems with all 3, for different reasons:
1. Via Group Policy: We've been asked to ensure that the extension is included in the package so GPOs are not really valid. It appears that the only way to make this work is to point the machine at the external URL which would fall down at the firewall anyway. (further information here: http://dev.chromium.org/administrators/policy-list-3#ExtensionInstallForcelist)
2. Via Registry: Just doesn't seem to work. I've 'packaged' the extension into a crx file and installed it to the local machine using my MSI; then used the registry table as described to call that file path. I've never seen this method work, which is unfortunate because the way that it is described on dev.chromium.org it *should* do exactly what we want to do.
3. Via master_preferences file: Works every time but a) needs to install from the web so will hit the firewall and bounce and b) is ONLY valid for new users who don't already have a profile (with a preferences file) created already. We will have users with existing Chrome profiles that we need to deploy to.
I've also tried snapshotting the installation of the extension to the user profile (%localappdata%\Google\Chrome\User Data\Default\Extensions\<extensionID>) but this seems to get completely wiped out on first run of Chrome.
Has anyone had any luck with getting extensions pre-loaded? If I could get the documented registry method working (point #2 above) that sounds like the best method but as yet I've never seen it working.
Appreciate any feedback!
Cheers,
LoZ
-
where can I find the manifest key??? deploying chrome is easy, setting preferences is proving to be more cumbersome than it's worth. Unfortunately I have no choice in the matter. - _blake 10 years ago
Answers (9)
I had to do this at a site, this might not be the best platform for this, but, I hate Google Chrome. There, I've said it. Kind of irrelevant I know, as a packager you just do as your told, but, me no likey Chrome.
Step by step guide for
Hangouts extension.
****NB (Also worth noting, this is for a physical install. Assuming you have the enterprise installer etc)
Go to google store, or from Chrome..
chrome://extensions/
Click the URL to get more extensions:
https://chrome.google.com/webstore/category/extensions?hl=en-GB
Choose hangouts, by default, it will just install it.
However, since we want the CRX file, you have to change the settings in Chrome to use a NW location for downloads (chrome://settings/, at the bottom of the page, choose advanced…)
Now it will prompt you for where to put the CRX file.
In Google Chrome, go to Extensions,
In Windows explorer, locate your CRX file, drag it into Chrome…
Follow any prompts, then the extension will appear in Chrome.
Now find the ID...
In the Extension view, enable Dev mode…
With Developer mode enabled the ID's are listed for all of the extensions…..
Now that you have the CRX file and the ID
You can put the information into:
"C:\Program Files (x86)\Google\Chrome\Application\33.0.1750.154\default_apps\external_extensions.json"
You have to find a bit more info too…
Either extract the CRX with 7-Zip (other tools are available) or go to:
%AppData%\Roaming\Google\Chrome\User Data\Default\Extensions
There will be folders for each extension, look for the folder with the ID
Under that folder will be a subfolder with the version (or find the manifest.json file, edit it to find the version )
So for Hangouts, the 3 bits of info you need are:
ID
CRX
version
The edited JSON file will look like this.
Now all you have to do, is get the CRX and the edited external_extensions.json file into:
C:\Program Files (x86)\Google\Chrome\Application\33.0.1750.154\default_apps
Choose your own weapon for that…. The formatting of the JSON is not great, I have changed it to get a nice picture that hopefully makes more sense.
Since this was a for a physical install, I installed the MSI with /QN:
http://www.google.com/intl/en/chrome/business/browser/admin/
I did this all in a batch file, silent MSI install, then copy down:
master_preferences, external_extensions.json and the CFR file
You should use the Enterprise version (which is already an MSI), unless you want to violate the EULA...
Thanks for your reply VBScab, but maybe I wasn't very clear in that statement. I did use their MSI and had to snapshot it.
The 'Enterprise' version is a setup.exe wrapped in an MSI. It's a shoddy cop-out by Google to appease enterprise admins. And besides that it has documented (unsolved for several versions) bugs to do with requiring access to 'phone home' during installation which can cause installation times of up to an hour if you're behind a firewall.
Regardless, getting back onto the question at hand, using the supplied MSI helps in no way to getting extensions pre-installed.
It's totally irrelevant whether you use the Google supplied MSI or snapshot. The documented extension deployment methods remain the same: GPO, Registry/crx file or master_preferences file. The packaging methodology is inconsequential.
Anyone on the board had any experience with deploying Google Chrome extensions?
If you abandon trying to get a vendor's MSI to work, maybe you're in the wrong field.
You've got me there. In all the years I've been packaging I have never learnt how to decompile a vendor setup, establish which function is attempting to 'phone home' and reverse engineer it to stop that function running. I feel like an absolute failure.
I'm sorry, did I not mention (in post #3, above) that the 'Enterprise' MSI supplied by Google is just a wrapper for the Google Chrome Installer executable? In fact, Google didn't actually put anything in the File table, the setup executable is in the Binary stream. I obviously need to work on my communication skills at the same time as the reverse engineering.
As I explained above, it's totally irrelevant to my original question about installing Chrome Extensions what was gained by snapshotting the vendor MSI. But go on I'll bite. The major difference between installing the vendor MSI (read: setup executable) and my snapshot is that my snapshot installs in about a minute, rather than an hour. Again, I'm pretty sure I mentioned that before but there seems to be some selective reading going on here as you try to prove a point about the evils of snapshotting vendor MSIs.
Can I ask that you please refrain from replying unless you have something useful to add that is specific to the original question.
Pre-installing extensions in your Chrome package with firewall restrictions is tricky. Here's the gist:
- Group Policy requires an external URL, blocked by your firewall. Consider a whitelist exemption for a specific internal download location.
- Registry method seems ideal, but double-check key structure and data types. Ensure the path points to the local .crx file within your package.
- Master_preferences works for new users, but not existing ones. Explore scripting to download and install locally on first Chrome launch.
While the documented registry method might be the best option, consider exploring alternative extension management tools or contacting the Chrome team for undocumented solutions.
I have Google Chrome packaged (snapshotted the MSI, but that's another story)You should use the Enterprise version (which is already an MSI), unless you want to violate the EULA...
How has it helped, anyway? The first thing that came to mind is the need to 'phone home': a snapshotted MSI will still have that problem, except it then becomes an integral part of the MSI rather than being (what I would guess is) a Custom Action. Oops...
so that the conversation will remain readable.