我正在开发一个使用WIX安装应用程序的项目。其中一个要求是在安装当前版本之前删除旧版本。旧版本不是基于MSI的,它是使用SetupApi创建的(它依赖于inf文件)。
我认为这可以通过自定义动作实现,逻辑如下:
我的问题是:
如果您感兴趣,以下是执行上述操作的代码段:
<Property Id="ANCIENTVERSION">
<RegistrySearch Id="RegistrySearchAncientVersion" Type="raw"
Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Program"
Name="UninstallString" />
</Property>
<CustomAction Id="removeAncientVersion"
Directory="SystemFolder"
<!--ExeCommand="[ANCIENTVERSION]" regular uninstall-->
ExeCommand="[ANCIENTVERSION],3" <!--silent uninstall-->
Execute="immediate"
Return="check"/>
<InstallExecuteSequence>
<Custom Action='removeAncientVersion' After='InstallValidate'>ANCIENTVERSION</Custom>
</InstallExecuteSequence>
答案 0 :(得分:1)
经过一些研究后,我发现为了运行静默卸载,需要在UninstallString命令行的末尾添加“,3”。我测试了它并且它有效:
定期卸载
RunDll32 advpack.dll,LaunchINFSection C:\PROGRA~1\PROGRAM\file.inf, DefaultUninstall
无声卸载
RunDll32 advpack.dll,LaunchINFSection C:\PROGRA~1\PROGRAM\file.inf, DefaultUninstall,3
至于第一个问题 - 由于卸载机制相当于在添加/删除程序中点击“卸载”,我相信它不会比这更清洁/更好。