这是我的安装执行顺序:
<InstallExecuteSequence>
<Custom Action='AlreadyUpdated' After='FindRelatedProducts'>SELFFOUND</Custom>
<Custom Action='NoDowngrade' After='FindRelatedProducts'>NEWERFOUND</Custom>
<Custom Action="SetInstallParameters" Before="actionInstall"/>
<Custom Action="SetUninstallParameters" Before="RemoveFiles">Installed AND NOT REINSTALL AND NOT UPGRADINGPRODUCTCODE</Custom>
<Custom Action="actionInstall" Before="InstallFinalize">NOT Installed AND NOT UPGRADINGPRODUCTCODE</Custom>
<Custom Action="actionUninstall" After="SetUninstallParameters">Installed AND NOT REINSTALL AND NOT UPGRADINGPRODUCTCODE</Custom>
<Custom Action="LaunchBrowser" After="InstallFinalize">NOT Installed</Custom>
</InstallExecuteSequence>
所以我需要实现主要的升级功能。名为“actionInstall”的自定义操作负责将 MySQL exe 注册为服务并运行应用程序,该操作通过连接到它并执行我的安装程序中包含的一些 sql 脚本来执行所有必要的数据库更新。
“actionUninstall”负责注销mysql服务。目前我对升级没有任何支持。
我需要实施重大升级。所以在升级时我需要执行以下操作:
复制并替换所有安装程序文件,除了 MySQL 二进制文件(MySQL 被视为永远不会更改)。所有文件都应复制到以前使用过的程序目录(可以是非标准的),无需任何用户确认。
不要执行 SetInstallParameters、actionInstall、SetUninstallParameters 和 actionUninstall。相反,我将创建另一个仅用于升级的自定义操作。它只会执行应用程序来执行数据库升级
- 不显示任何设置对话框(例如,目标目录选择、许可协议对话框)。
我的问题:
看来,主要升级也会导致执行安装和卸载 - 如何避免它?
如何从复制到目标目录中排除某些文件(MySQL 二进制文件),但仅在升级时(安装时应复制它们)
- 如何将新文件的目标目录设置为与以前安装时使用的相同(可以是用户在首次安装时选择的任何目录),而不要求用户选择目录?