RemoveExistingProducts之前和之后的CustomActions

时间:2013-08-16 17:23:55

标签: mysql wix custom-action

我正在尝试构建一个将升级mysql安装的msi。

我可以执行文件的基本升级,在干净安装上一切正常,我遇到的问题是,在执行升级时我需要执行一些关于卸载以前版本的操作。

我唯一遇到的问题是使用以下命令行更改其中一个MySQL GLOBAL设置

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

我这样做,因为建议在升级数据库时,innodb应该执行缓慢关闭,这是我能看到的最简单的方法。

目前我使用以下Wix来执行此操作

            <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" />

然而,这总是失败,我无法理解为什么当失败发生时我从msiexec日志中复制确切的命令行并通过命令行运行它。

这完全符合我的预期,但我无法弄清楚自定义操作的作用是什么。

在安装过程中,控制台会短暂打开,看起来MySQL可执行文件会运行,但参数出现问题并导致大量帮助信息出现,但我无法确定这是否正在发生,因为它过得很快。

有没有办法在此时暂停安装,以便我可以看到控制台中的内容?

我的Wix可以看到任何明显的问题吗?

编辑 -

此外,我不确定这是否与用户权限有关,我从“以管理员身份”打开的命令提示符运行MSIEXEC,但如果我确实需要提升权限,我何时可以执行此操作立即行动的行动?

请注意我知道Immediate不允许提升权限,但我不能使用延迟,因为它不允许我在RemoveExistingProducts之前执行命令。

我甚至不确定这与权利有什么关系,我只是指出我认为这是一个可能的原因,但我无法证明这一点。

2 个答案:

答案 0 :(得分:1)

Windows Installer不支持使用提升权限运行的立即自定义操作。要使用提升的权限执行自定义操作,必须将其标记为Deferred="yes"Impersonate="no"

答案 1 :(得分:0)

好的,我发现了我的错误,这是由于不知道Type 50 CaustomAction是如何工作的。

我所要做的就是使用包含我想要执行的可执行文件的完整路径的Property,并在ExecuteCmd属性中使用ONLY命令行参数

    <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"/>