Wix 复发性自愈;msi安装程序事件1001

Wix 复发性自愈;msi安装程序事件1001,wix,windows-installer,Wix,Windows Installer,我有一个已安装的产品,不知何故进入了一种状态,在这种状态下,广告的快捷方式将触发自我修复两次,然后退出。这一切过去都很好,但现在卸载也不会删除文件,我似乎无法回到一个干净的状态 触发自愈时,会出现MSIInstall 1001警告事件:在请求组件“{789CBE30-0F16-46CA-BA06-464AD61A458E}”期间检测到产品“{79D7389C-5858-48EE-B250-E84E789F8683}”,功能“CurrentUser”失败。 组件GUID是我的MainExe组件:

我有一个已安装的产品,不知何故进入了一种状态,在这种状态下,广告的快捷方式将触发自我修复两次,然后退出。这一切过去都很好,但现在卸载也不会删除文件,我似乎无法回到一个干净的状态

触发自愈时,会出现MSIInstall 1001警告事件:
在请求组件“{789CBE30-0F16-46CA-BA06-464AD61A458E}”期间检测到产品“{79D7389C-5858-48EE-B250-E84E789F8683}”,功能“CurrentUser”失败。

组件GUID是我的MainExe组件:

<Component Id="MainExe" Guid="{789CBE30-0F16-46CA-BA06-464AD61A458E}">
   <File Id="MyProgram.exe" Name="MyProgram.exe" Source="MyProgram.exe" KeyPath="yes" />
   <Shortcut Id="StartMenuShortcut" Name="My Program" Directory="StartMenuDir" Icon="Icon.exe" IconIndex="0" Advertise="yes" WorkingDirectory="APPLICATIONROOTDIRECTORY" />
   <Shortcut Id="DesktopShortcut" Name="My Program" Directory="DesktopFolder" Icon="Icon.exe" IconIndex="0" Advertise="yes" WorkingDirectory="APPLICATIONROOTDIRECTORY" />
</Component>
但修复的MSI日志显示:

MSI (s) (CC:EC) [10:47:50:769]: Feature: CurrentUser; Installed: Advertise;   Request: Local;   Action: Local
MSI (s) (CC:EC) [10:47:50:770]: Feature: CoreFiles; Installed: Advertise;   Request: Local;   Action: Local
MSI (s) (CC:EC) [10:47:50:770]: Feature: InstallerUI; Installed: Advertise;   Request: Local;   Action: Local
MSI (s) (CC:EC) [10:47:50:770]: Component: MainExe; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
我尝试运行,但它告诉我:

$ cscript.exe //nologo Unadvertise.wsf /ProductCode:{79D7389C-5858-48EE-B250-E84E789F8683}
Checking if product {79D7389C-5858-48EE-B250-E84E789F8683} is installed
Product {79D7389C-5858-48EE-B250-E84E789F8683} is installed as AAA My Program
Checking for advertised features in product {79D7389C-5858-48EE-B250-E84E789F8683}
Found feature CurrentUser : Local
Found feature CoreFiles : Local
Found feature InstallerUI : Local
Product {79D7389C-5858-48EE-B250-E84E789F8683} does not have advertised features

如何诊断问题,或至少清理此产品的状态?同样,现在卸载不会删除文件,也不会解决问题。

如果没有其他帮助,您始终可以手动删除应用程序(例如,删除所有属于的文件和快捷方式),并使用(更新版本的Windows上不推荐、不支持和不安全的工具,2017年8月)更正安装程序数据库


然后再次安装MSI并检查错误是否依然存在,如果仍然存在,MSI本身就有问题。

我认为我犯的错误是使用了,它与相同或类似,可能会使您的MSI数据库无效


放弃了尝试修复我的机器,现在我在虚拟机中进行所有MSI测试

写了下面的答案后,我发现我以前也回答过类似的问题我认为影响您的软件包的问题是,有一个密钥路径设置为安装到userprofile的文件。请参阅此处的完整详细信息:。我将留下下面的答案作为解释问题的另一种方式


此应用程序的名称是什么?由于组件的键路径设置为空文件夹,而不是文件的完整路径,因此会出现周期性自我修复的情况。Windows Installer倾向于删除空文件夹,除非为MSI中的文件夹添加CreateFolder条目。很可笑,但这就是技术的工作原理

我已经好几年没有看到这个问题了,但大致情况是这样的:

  • 缺少组件密钥路径
  • 将调用播发的快捷方式
  • keypath检查发现缺少一个组件,已计划安装该组件
  • 安装过程中出现故障,密钥路径仍然丢失
  • 下次调用播发的快捷方式时,自我修复会重复该循环,但没有效果
  • 发生这种情况的一个原因是,目标位置由于某种原因处于写保护状态。还有其他情况,例如,当目标位置硬编码到用户配置文件中登录用户不存在的位置时-例如,另一个用户配置文件:

    • C:\Users\User\MyFile.ini
    • C:\Users\AnotherUser\MyFile.ini

    关于自愈问题,这里有一个很好的全面解释:

    您是否执行了升级?可能就是在MigrateFeatureState标准操作期间,该功能按照播发的方式安装,继承了以前版本的功能安装状态。关于清理机器,这可能很棘手,没有确切的解决方案,通常我在虚拟机上进行测试,以便在软件包损坏时轻松恢复快照。MSIZAP或多或少是我陷入这一困境的原因。是的,似乎大多数MSI清理工具现在都不推荐使用。我认为截至2017年8月,唯一可以尝试的工具是:
    $ cscript.exe //nologo Unadvertise.wsf /ProductCode:{79D7389C-5858-48EE-B250-E84E789F8683}
    Checking if product {79D7389C-5858-48EE-B250-E84E789F8683} is installed
    Product {79D7389C-5858-48EE-B250-E84E789F8683} is installed as AAA My Program
    Checking for advertised features in product {79D7389C-5858-48EE-B250-E84E789F8683}
    Found feature CurrentUser : Local
    Found feature CoreFiles : Local
    Found feature InstallerUI : Local
    Product {79D7389C-5858-48EE-B250-E84E789F8683} does not have advertised features