【问题标题】:Issues with uninstall program in control panel built with WiX toolset使用 WiX 工具集构建的控制面板中的卸载程序问题
【发布时间】:2019-10-05 13:35:00
【问题描述】:

我正在创建 msi 安装程序,它使用 wix 工具集为 Windows 自动启动运行服务。 msi 已成功编译和安装,并且服务工作正常。

问题是,当我尝试在控制面板中卸载程序时,它显示以下消息:

我尝试从 regedit 中删除该程序并尝试使用以下命令进行安装:

MsiExec /I installer.msi REINSTALLMODE=voums REINSTALL=ALL

这是产品和包装声明的代码:

<Product Name='Foobar 1.0' Manufacturer='Acme Ltd.' Id='6DA5C23A-86C7-4D14-AEC0-86416A69ABDE' UpgradeCode='6DA5C23A-7349-453F-94F6-BCB5110BA4FD' Language='1033' Codepage='1252' Version='1.0.0'>
    <Package Id='*' Keywords='Installer' Description="Acme's Foobar 1.0 Installer" Comments='Foobar is a registered trademark of Acme Ltd.' Manufacturer='Acme Ltd.' InstallerVersion='100' Languages='1033' Compressed='yes' SummaryCodepage='1252' />

INSTALLDIR,我有一个exe文件用于服务,并做一些操作:

<Directory Id='INSTALLDIR' Name='Foobar 1.0'>

    <Component Id='ConfPathEnv' Guid='6DA5C23A-6BE3-460D-A14F-75658D16550B' KeyPath="yes">
        <Environment Id="AQLIGHT_CONFIG_PATH" Name="AQLIGHT_CONFIG_PATH" Value="[INSTALLDIR]config.json" Permanent="yes" Part="last" Action="set" System="yes" />
    </Component>

    <Component Id='MainExecutable' Guid='6DA5C23A-83F1-4F22-985B-FDB3C8ABD471'>
        <File Id='serviceEXE' Name='service.exe' DiskId='1' Source='service.exe' KeyPath='yes' />
        <ServiceInstall Id="InstallService" Name="AqLightService" DisplayName="AqLightService 1.0" Start="auto" ErrorControl="normal" Arguments="install" Type="ownProcess" />
        <ServiceControl Id="ControlService" Name="AqLightService" Start="install" Stop="uninstall" Remove="uninstall" Wait="yes" />
    </Component>

</Directory>

为了在卸载程序时删除文件夹,我使用以下代码:

<Directory Id="ProgramMenuFolder" Name="Programs">
    <Directory Id="ProgramMenuDir" Name="Foobar 1.0">
        <Component Id="ProgramMenuDir" Guid="6DA5C23A-7E98-44CE-B049-C477CC0A2B00">
            <RemoveFolder Id='ProgramMenuDir' On='uninstall' />
            <RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]' Type='string' Value='' KeyPath='yes' />
        </Component>
    </Directory>
</Directory>

我多次尝试更改每个组件的 GUID,但没有帮助。

【问题讨论】:

  • 这会发生在干净的测试机器、开发机器还是用户机器上?当安装程序出现明显错误并且最容易诊断和修复时,干净的测试机器会有所帮助。开发人员机器在工作时很好,但本身可能会成为问题。用户机器可以发现更多现实世界的问题,但奇怪的问题可能不值得花时间去诊断。
  • @TomBlodget,感谢您的评论。发现日志记录的问题,问题是由于 CustomAction。它在卸载过程中运行,这就是导致问题的原因。
  • 卸载失败几乎都是自定义操作。希望您在干净的 VM 或可以重新映像的机器上进行测试。从机器上安装失败很有趣但可行。
  • 你把这个排序了吗?

标签: wix windows-installer


【解决方案1】:

自定义操作:该错误消息可能意味着很多事情,但最常见的原因是自定义操作失败。但是,在这种情况下,消息似乎来自 iTunes

日志记录:没有两种方法:您需要一个详细的日志文件来尝试理解这一点(适当调整路径):

msiexec.exe /x "Setup.msi" /L*V "C:\Setup.log"

自我修复?:我的猜测是您的机器/Windows Installer 数据库已损坏,或者您遇到了自我修复问题 通过入侵注册表变成了一台损坏的机器。可能是。 On Self-Repair.


调节:当您需要条件仅在特定时间/安装模式下运行时 - 您需要处理调节。关于 MSI 条件有很多先前的答案。他们总是很难做到正确,测试是必不可少的。请参阅下面的答案以获取信息:

这个条件对你来说可能已经足够了(不保证):

NOT Installed AND NOT UPGRADINGPRODUCTCODE

请在所有安装模式下测试:installuninstallmodifyrepair self-repairpatchingmajor upgradeetc...。很难说事情是如何发生的,无法替代现实世界的测试(只是为了说明这一点)。


以下是有关记录和解释日志文件的更多详细信息:

【讨论】:

  • 非常感谢您的回答。日志记录显示错误是由于 CustomAction 而发生的。实际上,我不需要在卸载过程中执行自定义操作。我想知道,卸载程序时如何跳过执行CustomAction。
  • 我们能问一下自定义操作在做什么吗?为什么它会调用 iTunes?您需要正确调整自定义操作,使其仅在正确的安装模式下发生。 NOT Installed 表示它仅在全新安装期间以及在主要升级期间安装的新版本中运行。 NOT Installed AND NOT UPGRADINGPRODUCTCODE 表示它仅在全新安装期间运行,而不在主要升级期间安装的新版本中运行。条件是非常复杂的。测试是必不可少的。请参阅上面的更新内容(稍后)。
  • 非常感谢先生!自定义操作的条件确实很有帮助。
  • 是否有幸找到 iTunes 如此受欢迎的原因?
  • 为了显示错误信息,我只是从互联网上复制了类似的屏幕 URL,第一个是 iTunes 屏幕:)
猜你喜欢
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-07
  • 2013-09-21
  • 2015-05-07
相关资源
最近更新 更多