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

Installation savedState字典在安装程序中是如何工作的?,installation,windows-installer,Installation,Windows Installer,在Install and UnInstall overrides(安装和卸载覆盖)中,我很难找到有关stateSaver/savedState字典如何适用于Windows Installer的文档,有人能帮忙吗 在我的installers CustomAction中,我一直在向注册表项写入数据,每次写入时,我都会向stateSaver添加一些详细信息。 我以为卸载时会考虑到这一点,但如何考虑呢 我认为stateSaver字典在安装时会写入文件,卸载该文件的内容时,.InstallState会被读

在Install and UnInstall overrides(安装和卸载覆盖)中,我很难找到有关stateSaver/savedState字典如何适用于Windows Installer的文档,有人能帮忙吗

在我的installers CustomAction中,我一直在向注册表项写入数据,每次写入时,我都会向stateSaver添加一些详细信息。 我以为卸载时会考虑到这一点,但如何考虑呢

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

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

下面是一个安装的示例

RegistryKey expressionEvaluatorVersionKey = expressionEvaluatorKey.CreateSubKey(packageVersion);
这是为Windows Installer中添加的密钥创建子密钥。
如何在卸载中删除此子项?

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

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

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

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

由于您似乎已经在使用自定义动作dll来完成这项工作,希望我的建议不是那么繁重