【问题标题】:Wix custom action to remove older version installed with INF fileWix 自定义操作以删除使用 INF 文件安装的旧版本
【发布时间】:2012-01-30 17:46:54
【问题描述】:

我正在开发一个使用 WIX 安装应用程序的项目。要求之一是在安装当前版本之前删除旧版本。旧版本不是基于 MSI 的,它是使用 SetupApi(依赖于 inf 文件)创建的。

我认为这可以通过自定义动作来实现,逻辑如下:

  1. HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%NAME% 中寻找“古老”版本,并尽可能提取 UninstallString
  2. 如果设置了该值,则运行将执行该命令的自定义操作,通常是一个字符串,如 RunDll32 advpack.dll,LaunchINFSection C:\PROGRA~1\PROGRAM\file.inf, DefaultUninstall时间>
  3. 此操作必须在安装程序之前执行,因为它们具有共享文件和注册表项。如果在 MSI 安装结束时执行自定义操作,则会破坏程序

我的问题是:

  1. 这是删除基于 INF 的旧程序的推荐方法吗?
  2. 有没有办法静默卸载基于 INF 的程序?否则用户体验会很差——一个人正在安装一个程序,突然他们看到一个“卸载程序”窗口。这是反直觉的。 [通过在卸载命令中添加“,3”解决]

如果您有兴趣,这里是执行我上面描述的代码 sn-ps:

<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。或者,您可以向用户显示一个对话框,在其中您说您将删除以前版本的应用程序。
  • 直接调用 SetupAPI 函数是一种选择 - 但不幸的是,我无法找到有关如何使用 SetupAPI 进行静默卸载的任何详细信息。有关于静默安装的讨论,但我不确定这是否适用于删除过程。到目前为止,我的实验并不成功。

标签: windows wix inf


【解决方案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

至于第一个问题——由于卸载机制相当于在添加/删除程序中单击“卸载”,我相信它不会比这更干净/更好了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    相关资源
    最近更新 更多