【问题标题】:WiX: Forcefully launch uninstall previous using CustomActionWiX:以前使用 CustomAction 强制启动卸载
【发布时间】:2010-04-23 22:28:23
【问题描述】:

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

我找到了一些指南,告诉我应该如何使 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:  

我无法掌握执行实际卸载所需的 CustomAction。

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

MSI 日志显示:
信息 1721。此 Windows 安装程序包有问题。无法运行完成此安装所需的程序。请联系您的支持人员或软件包供应商。操作: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,命令:

有人看到我在这里做错了吗?

问候
莱夫

【问题讨论】:

    标签: wix


    【解决方案1】:

    我在美国大陆航空公司做了几年的应用程序重新打包,在那里我将 SMS 推送到 18,000 个座位的森林。我经常有一个未使用 MSI 安装的旧应用程序,我需要使用 MSI 重新部署它,一旦完成,我支持未来的重大升级。

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

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

    【讨论】:

      【解决方案2】:

      睡了一夜好觉后,我发现了我的错误。 如果你真的读过http://wix.sourceforge.net/manual-wix3/wix_xsd_customaction.htm,答案就在那里。

      我正在尝试进行类型 50 自定义操作,启动系统上已安装的可执行文件。

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

      ExeCommand 指定上述可执行文件的命令行参数。

      我的错是我确实将完整的 exe+命令行放在了 Property 字段中。

      /L

      【讨论】:

        猜你喜欢
        • 2019-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多