wixwindows-installergpo

Why doesn't installation of multi-language MSI work via GPO?


I'm trying to test GPO deployment and came across this issue whereby the multi-language MSI failed to deploy. I have a multi-language Wix project and produced 2 MSIs (English and multi-language). I have two remote VMs with one acting as a server (Windows Server 2012 R2) which will push the GPO policies to the other one acting as a client VM (Windows 10).

Here are some clues:

What went wrong?

Appendix

These are the GPO setting that I have setup for both MSIs in the server under User Configuration > Policies > Software Settings. enter image description here

This is the log of the successful one (English)

enter image description here

This is the log of the unsuccessful one (Multi-language)

enter image description here


Solution

  • Update 23 June 2021

    I forwarded the issue to Wix github page and someone was able to help find out the root cause. You may view their reply here.

    You advertised the product {4AC8B148-A051-4CC4-86D4-8D2079A8CF54} and then tried to perform a transaction (I assume to transition it from advertised to installed) on the product {e4bedd32-4df6-475e-aef5-b12a58497a1c} (which doesn't exist on the system).

    Basically, when advertising an MSI, any embedded transforms would appear to be ignored for purposes of the identification of the product(s) contained in the MSI file. Yet, when installing, embedded "language transforms" are automatically applied.

    If you had installed the MSIs directly, without first advertising them, that may have worked.

    The solution would then be either simply having a set productID instead of asterisk (*) OR sync the productID of all multi-language MSI's with the main installer's productID after the multi-language MSIs are generated.

    Personally, I went with the second option and I use wirunsql + batch script like this:

    REM Get the product ID from the installer that you want to make into a multi-language installer
    FOR /F %%a IN ('C:\Windows\System32\cscript.exe .\wirunsql.vbs %RELEASEDIR%\en-US\installer.msi "SELECT Value From Property WHERE Property = 'ProductCode'"') DO ( SET ENUSGUID=%%a&& echo ENUSGUID )
    
    REM Use wrunsql.exe to update the product ID of German language installer
    C:\Windows\System32\cscript.exe .\wirunsql.vbs %RELEASEDIR%\de-DE\installer.msi "UPDATE Property SET Value='%ENUSGUID%' WHERE Property='ProductCode'"
    ...
    REM repeat for other installers in other languages
    ...
    REM finally extract the transform files from each installer and inject into the main installer
    

    Old answer

    Apparently, GPO deployment works only if the deployed MSI uses either neutral language (LCID = 0) or English language for installation. If not, GPO will choose the lowest Language Code ID (LCID) in your list of LCIDs as the default language for installation. If the chosen LCID's language pack does not exist in the targeted OS, the deployment will fail. I'm not sure how this is related to error code 1605 though.

    I'm not sure how to do this in Wix Toolset but it can absolutely be done in an MSI editor such as Orca. Just go to View > Summary Information and add 0 to the list of LCIDs in the Languages field as shown below.

    WARNING

    Apparently, setting a neutral language in your MSI seems to make Windows Installer launch in English when running it manually. It doesn't follow the region format of the OS.

    I

    Source: https://www.advancedinstaller.com/forums/viewtopic.php?f=2&t=29094&p=76677#p76677