0

我正在尝试构建一个将升级 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 不允许提升权限,但我不能使用 deferred,因为它不允许我在 RemoveExistingProducts 之前执行命令。

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

4

2 回答 2

1

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

于 2013-08-17T22:23:44.070 回答
0

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

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

    <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"/>
于 2013-08-19T13:42:56.567 回答