2
我正在使用WIX安装应用程序的项目。其中一个要求是在安装当前版本之前删除旧版本。旧版本是不是基于MSI的,它是使用SetupApi(依赖于inf文件)创建的。Wix自定义操作以删除使用INF文件安装的旧版本
我想这可以通过自定义操作来实现,逻辑如下:
- 寻找在HKLM \ SOFTWARE “古” 版\微软\的Windows \ CurrentVersion \卸载\%NAME如果该值被设置%并提取UninstallString值如果可能
- ,运行,将执行该命令的自定义动作,通常它像RUNDLL32 advpack.dll一个字符串,LaunchINFSection C:\ PROGRA〜1 \ PROGRAM \ file.inf,DefaultUninstall
- 此操作必须在安装程序之前执行,因为它们具有共享文件和注册表项。如果自定义操作在MSI安装结束时执行的,它会破坏程序
我的问题是:
- 这是拆除旧,基于INF计划的建议呢?
-
有没有一种方法可以静默卸载基于INF的程序?否则,用户体验将会非常糟糕 - 一个人正在安装一个程序,并且他们突然看到一个“卸载程序”窗口。这是违反直觉的。[通过将解决”,3" ,以卸载命令]
如果你有兴趣,这里是做什么上述我的代码片段:
<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>
我想你可以创建一个应用程序,并用你自己的相应INF调用SetupAPI函数。这样你可以禁止默认的进度UI。或者,您可以向用户显示一个对话框,您可以在其中说您将要删除该应用程序的先前版本。 – 2012-02-01 06:36:53
直接调用SetupAPI函数是一个选项 - 但不幸的是,我无法找到有关如何使用SetupAPI执行无提示卸载的任何详细信息。 有关于静默安装的讨论,但我不确定这适用于删除过程。到目前为止,我的实验并不成功。 – Alex 2012-02-01 14:04:44