Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WiX:使用CustomAction强制启动卸载先前版本_Wix - Fatal编程技术网

WiX:使用CustomAction强制启动卸载先前版本

WiX:使用CustomAction强制启动卸载先前版本,wix,Wix,我正在为我们的产品写一个新的重大升级。 在我的安装程序中,我首先查找以前版本的配置设置,然后我想卸载以前的版本 我找到了一些指南,告诉我应该如何使MSI适合这样的升级 但是,上一个不是MSI。 这不符合最佳做法 但是,它在注册表HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall{GUID}中指定卸载字符串 使用RegistrySearch,我可以很容易地找到下面的命令,它存储在UNINSTALL\u CMD中 RunDll32 C:\

我正在为我们的产品写一个新的重大升级。 在我的安装程序中,我首先查找以前版本的配置设置,然后我想卸载以前的版本

我找到了一些指南,告诉我应该如何使MSI适合这样的升级

但是,上一个不是MSI。
这不符合最佳做法

但是,它在注册表HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall{GUID}中指定卸载字符串

使用RegistrySearch,我可以很容易地找到下面的命令,它存储在UNINSTALL\u 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:  
我无法掌握执行实际卸载所需的CustomAction的窍门

       <CustomAction Id="ca.UninstPrev" Property="UNINSTALL_CMD" ExeCommand="" />

MSI日志显示:
信息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,命令:

有人知道我做错了什么吗

问候

Leif

我在大陆航空公司做了几年的应用程序重新打包工作,在那里我把短信推到了一个18000个座位的森林。我经常有一个未使用MSI安装的遗留应用程序,我需要使用MSI重新部署该应用程序,完成后,我支持继续进行重大升级

这些以前部署的应用程序通常有非常坏的和行为不端的卸载程序。我不会调用它们,而是使用SMS查询林以获取所有部署的版本。然后,我将这些旧包部署到集成实验室,计算出每个安装程序对机器所做的操作,并编写我自己的聚合“强制清理”自定义操作,该操作能够从机器上擦除应用程序的各种版本


我在CostInitialize之前执行了这个自定义操作,这样当新的MSI这样做时,它的成本就不会受到机器上不再存在的垃圾的影响。这对我来说很有效,因为我将包作为系统推送,不必担心标高问题。如果您希望完全符合UAC,您可能希望从prereq包运行此自定义代码,并让您的用户手动运行它,或者将其连接到引导程序中,以便在MSI之前运行。

晚上睡个好觉后,我发现了错误。 如果你真的读了,答案就在那里

我试图做一个Type50自定义操作,启动一个已经安装在系统上的可执行文件

属性指定要启动的可执行文件的完整路径

execomand指定上述此可执行文件的命令行参数

我的错误是我在属性字段中放置了完整的exe+命令行

/L