savedState字典如何在安装程序中工作?

时间:2009-08-25 11:31:56

标签: installer installation windows-installer

我很难找到有关stateSaver / savedState Dictionary如何为Windows Installer工作的文档,在Install和UnInstall覆盖中,有人可以提供帮助。

在我的安装程序CustomAction中,我一直在写注册表项,每次我都会向stateSaver添加一些细节。 我曾假设在卸载时会考虑到这一点但是如何?

我认为在安装时会将stateSaver字典写入文件,卸载时会读取该文件的内容,读取.InstallState并用于安装它找到的条目。

我的问题是卸载后仍然存在一些注册表项,我不知道为什么以及我对字典的工作方式缺乏了解并没有帮助。

以下是安装正在进行的操作的示例

RegistryKey expressionEvaluatorVersionKey = expressionEvaluatorKey.CreateSubKey(packageVersion);

这是为Windows Installer添加的密钥创建子密钥。 如何在卸载中删除此子密钥?

1 个答案:

答案 0 :(得分:1)

我不确定installState是你的问题。这只是一个包含各种键值对的文件,我认为那里没有任何智能化的东西。

这听起来像(内置)卸载程序进程可能会说“我需要删除此密钥但它不是空的,因此我将离开它”。

您是否可以将所有注册表项/条目创建(以及隐含所有键/条目删除)放入自定义操作DLL?

我在installState中发现的另一个问题 - 这就是为什么我试图避免它 - 是人们不知道并且删除了installState文件。根据您编写卸载自定义操作的方式,这可能意味着您永远不会干净地卸载您的程序,因为当您尝试读取您希望在字典中缺少的内容时,您将获得异常。

既然您似乎已经使用自定义操作dll来完成这项工作,希望我的建议不是那么繁重?