我正在尝试构建一个将升级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=""[MYSQLINSTALLBINPATH]mysql.exe" -u root --host=127.0.0.1 --port=5002 mysql --execute="SET GLOBAL innodb_fast_shutdown=0""
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之前执行命令。
我甚至不确定这与权利有什么关系,我只是指出我认为这是一个可能的原因,但我无法证明这一点。
答案 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="SET GLOBAL innodb_fast_shutdown=0""
Return="check" Impersonate="yes"/>