Question

I am trying to build an msi that will upgrade an installation of mysql.

I can perform the basic upgrade of files and on a clean install everything works fine, the problem I have is, when performing an upgrade I need to perform a couple of actions around the uninstall of the previous version.

The only action I'm having trouble with is a change of one of the MySQL GLOBAL settings using the following command line

mysql.exe -u root --host=127.0.0.1 --port=5002 mysql --execute="SET GLOBAL innodb_fast_shutdown=0"

I do this as it is suggested that when upgrading a database innodb should perform a slow shutdown and this was the easiest way I could see of doing this.

Currently I use the following Wix to perform this action

            <CustomAction Id="Innodb_slowshutdown" Property="OLDMYSQLEXE" Execute="immediate" 
                ExeCommand="&quot;[MYSQLINSTALLBINPATH]mysql.exe&quot; -u root --host=127.0.0.1 --port=5002 mysql --execute=&quot;SET GLOBAL innodb_fast_shutdown=0&quot;"
                Return="check" Impersonate="yes"/>

    ...

                <Custom Action="Innodb_slowshutdown" After="InstallInitialize">UPGRADEFOUND and NOT UPGRADINGPRODUCTCODE and NOT REINSTALL and MYSQLINSTALLBINPATH</Custom>
                <RemoveExistingProducts After="Innodb_slowshutdown" />

However this always fails and I cannot understand why as when the fail occurs I copy the exact command line from the msiexec log and run it through a command line.

This works exactly as I would expect but I cannot figure out what the custom action is doing that is different.

During the install a console opens briefly and it would seem that the MySQL executable runs but something is wrong with the arguments and it causes a load of help info to come up, though I cant be sure this is exactly whats happening as it passes very quick.

Is there any way to pause the install at this point so I can see what is in the console?

Can anyone see any obvious problems with my Wix?

EDIT -

Also I'm not sure if this has anything to do with user rights, I run MSIEXEC from a command prompt opened "As Administrator" but if I did need to elevate rights how could I do this when I need to execute the action with the type immediate?

Please note I am aware that Immediate does not allow elevated rights but I cannot use deferred as it will not allow me to execute the command before RemoveExistingProducts.

I am not even sure it is anything to do with rights, I am merely pointing out that I have considered this as a possible reason but I cannot prove it.

Was it helpful?

Solution 2

Ok I found my mistake, this was due to not knowing how a Type 50 CaustomAction works.

All I had to do was to use a Property that contained the full path of the executable I wanted to execute and use ONLY command line arguments in the ExecuteCmd property

    <CustomAction Id="Innodb_slowshutdown" Property="OLDMYSQLEXE" Execute="immediate" 
        ExeCommand="-u root --host=127.0.0.1 --port=5002 mysql --execute=&quot;SET GLOBAL innodb_fast_shutdown=0&quot;"
        Return="check" Impersonate="yes"/>

OTHER TIPS

Windows Installer doesn't support immediate custom actions that run with elevated rights. To execute a custom action with elevated rights, it must be marked Deferred="yes" and Impersonate="no".

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top