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

时间:2011-07-08 00:18:09

标签: c# windows-services windows-installer install uninstall

我需要创建一些Windows服务,显然我想将它们打包成一个漂亮的安装程序。

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

Advanced Service Installation

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

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

  1. 安装程序正常运行,服务已安装(但未按预期启动)
  2. 我的服务本身都有效
  3. 卸载失败,说明标题中的错误
  4. 有什么奇怪的:

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

    这让我疯了。

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

    调试此类事情非常困难(甚至不知道如何),文档非常稀缺(甚至不存在)。

    有人提示吗?

5 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,我设法通过为自定义操作添加适当的条件来修复它。在我的情况下,我在安装和卸载阶段将未安装添加到我的Windows服务安装程序。之后没有错误。 希望这会有所帮助!查找有关此问题的更多信息here

答案 1 :(得分:2)

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

  • 转到文件夹安装
  • 使用记事本或xml编辑器编辑文件.InstallState
  • 转到ArrayOfKeyValueOfanyTypeanyType节点,然后转到Keys节点
  • 删除anyType子项
  • 转到“值”节点并删除所有anyType子项
  • 保存文件并尝试卸载

这对我有用。问候

答案 2 :(得分:1)

我知道这是一篇旧帖子,但我在执行自定义操作之前通过调用Installer类来修复我的问题,我不小心首先通过基本调用添加了我的代码。

答案 3 :(得分:1)

转到控制面板,然后首先修复您的设置。修复成功后,您将可以卸载。

答案 4 :(得分:0)

我有一个类似的问题,Windows Installer程序包(.msi)没有按预期卸载。我的解决方法是使用命令行使用InstallUtil.exe进行卸载。然后,使用InstallUtil.exe重新安装该服务。之后,我终于能够使用旧的msi进行卸载。在我使用旧的MSI卸载后,我能够使用新的msi进行安装,并且一切都按预期工作。