我正在为我们的产品写一个新的重大升级.在我的安装程序中,我首先查找以前版本的配置设置,然后我想卸载以前的版本.
我找到了几个指南,告诉我如何使MSI适合这种升级.
但是,之前的不是MSI.
这不符合最佳做法.
但是,它在注册表HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall {GUID}中指定了一个UninstallString.
使用RegistrySearch我可以很容易地找到下面的命令,我将其存储在UNINSTALL_CMD中.
RunDll32 C:\PROGRA~1\COMMON~1\INSTAL~1\PROFES~1\RunTime\10\01\Intel32\Ctor.dll,LaunchSetup
"C:\Program Files\InstallShield Installation Information\{GUID}\setup.exe"
-l0x9 -removeonly 4:
Run Code Online (Sandbox Code Playgroud)
我无法获得执行实际卸载所需的CustomAction.
<CustomAction Id="ca.UninstPrev" Property="UNINSTALL_CMD" ExeCommand="" />
Run Code Online (Sandbox Code Playgroud)
MSI日志显示:
Info 1721.此Windows Installer程序包存在问题.无法运行此安装所需的程序.请联系您的支持人员或包装供应商.操作:ca.UninstallPrevious,位置:RunDll32 C:\ PROGRA~1\COMMON~1\INSTAL~1\PROFES~1\RunTime\10\01\Intel32\Ctor.dll,LaunchSetup"C:\ Program Files\InstallShield安装信息{GUID}\setup.exe"-l0x9 -removeonly,命令:
有谁看到我在这里做错了什么?
关心
莱夫
我在美国大陆航空公司进行了几年的应用程序重新包装,我将短信推送到18,000座森林.我经常使用未使用MSI安装的遗留应用程序,我需要使用MSI重新部署,一旦完成,我支持未来的主要升级.
这些以前部署的应用程序通常具有非常破碎和行为不端的卸载程序.我会使用SMS来查询林以获取所有已部署的版本,而不是调用这些.然后我会部署这些老包到集成实验室,制定出它是什么每个安装程序做的机器和我自己写的聚集的"强制清除"习俗,这是能够擦申请关闭机器的各种版本的作用.
我在CostInitialize之前执行了这个自定义操作,这样当新的MSI执行它的成本时,它不会受到机器上不再存在的垃圾的影响.这对我有用,因为我将软件包推送到系统,我不必担心高程问题.如果你想成为完全符合UAC,你会想从一个前提条件包运行此自定义代码,并可以有你的用户手动运行或电线之成为一个引导程序之前,您的MSI运行.