MSI 卸载问题:错误 1001 -> 保存的状态字典包含不一致的数据并且可能已损坏

Kri*_*ris 3 c# installation windows-installer windows-services uninstallation

我需要创建一些 Windows 服务,显然我想将它们打包到一个不错的安装程序中。

由于我不熟悉服务创建/安装,我基本上使用了以下示例中的代码:

高级服务安装

我没有更改 ProjectInstaller 或 InstallActions,基本上只是插入了我自己的服务(文件监控/转换)。

构建和编译代码工作正常:

  1. 安装程序工作,服务已安装(但未按预期启动)
  2. 我的服务本身都有效
  3. 卸载失败,说明标题中的错误

很奇怪的是:

如果在卸载失败后,我运行“修复”并随后从安装文件夹中手动删除 *.Installstate,则卸载程序会神奇地工作。

这让我发疯。

我想我可以为我的服务的潜在用户记录这个怪癖,但我不喜欢不知道真正发生了什么。

调试这类事情真的很难(甚至不知道如何调试)并且文档非常稀缺(甚至不存在)。

有人有一些提示吗?

小智 5

我通过这样做解决了这个问题:

  • 进入文件夹安装
  • 使用记事本或 XML 编辑器编辑文件 xxxxxxx.InstallState(其中 xxxxx 是您的服务名称)
  • 转到ArrayOfKeyValueOfanyTypeanyType节点,然后转到Keys节点
  • 删除anyType子项
  • 转到 Values 节点并删除所有anyType子项
  • 保存文件并尝试卸载

这对我有用。问候