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

3
我需要创建几个Windows服务,显然我想将它们打包成一个漂亮的安装程序。
由于我不熟悉服务的创建/安装,所以基本上使用了以下示例代码: 高级服务安装 我没有更改ProjectInstaller或InstallActions,基本上只是插入了自己的服务(文件监视/转换)。
构建和编译代码非常顺利:
  1. 安装程序正常工作,服务已安装(但未像预期的那样启动)
  2. 我的服务本身都可以正常工作
  3. 卸载失败,并显示标题中的错误
非常奇怪的是:
如果在卸载失败后,我运行“修复”,然后手动从安装文件夹中删除*. Installstate,则卸载程序就会神奇地工作。
这让我感到非常困扰。
我想我可以为我的服务的潜在用户记录这个怪癖,但我不喜欢不知道实际发生了什么。
调试这种事情非常困难(甚至不知道如何),而文档非常缺乏(甚至不存在)。

有没有一些提示?

5个回答

8

我通过以下方法解决了这个问题:

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

这对我有效。谢谢!


非常感谢您提供如此详细的答案。 - Aneeq Azam Khan

2
我遇到了同样的问题,通过在自定义操作中添加适当的条件来解决。在我的情况下,在安装和卸载阶段,我将未安装添加到Windows服务安装程序中。之后就没有出现错误了。 希望这能帮助到您!在此问题上查找更多信息,请单击此处

1

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


1

前往控制面板,首先修复您的安装设置。成功修复后,您将能够卸载。


你的评论帮助了我很多。谢谢!+1 - sky-dev

0
我遇到了一个类似的问题,即 Windows Installer Package (.msi)未按预期卸载。我的解决方法是使用命令行使用InstallUtil.exe进行卸载,然后再使用InstallUtil.exe重新安装该服务。然后,我终于能够使用旧的MSI卸载。在我使用旧的MSI卸载之后,我可以使用新的MSI进行安装,并且一切都按预期工作了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接