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

lea*_*tes 6 installation installer windows-installer

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

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

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

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

这是Install正在做的事情的一个例子

RegistryKey expressionEvaluatorVersionKey = expressionEvaluatorKey.CreateSubKey(packageVersion);
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*teH 1

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

在我看来,(内置)卸载程序进程可能会说“我需要删除此密钥,但它不是空的,因此我要保留它”。

您能否将所有注册表项/条目创建(以及暗示所有项/条目删除)放入自定义操作 dll 中?

我在 installState 中发现的另一个问题(这就是我试图避免它的原因)是,人们并不知道会出现并删除 installState 文件。根据您编写卸载自定义操作的方式,这可能意味着您永远无法彻底卸载程序,因为当您尝试读取字典中缺少的内容时,您会遇到异常。

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