令人烦恼的是,我在安装程序中指定了
uninsdeletekey
标志:
Root: "HKA"; Subkey: "Software\Company\Application"; Flags: uninsdeletekey
类似问题:
第二个问题与我的问题更相关。但我无法按照答案中的建议修改任何卸载程序。
这样已经20年了!但我现在为同一个程序创建了两个安装程序。一个分别适用于 32/64,在安装过程中,他们删除了旧的应用程序。
好的方面是,不会丢失用户数据。一旦崩溃,注册表中的所有数据都会丢失。我查看了卸载程序的命令行开关,似乎没有什么可以阻止这种情况发生。
目前我能想到的唯一解决方案是:
我是在重新发明轮子吗?我想看看是否有一个现有的优雅的解决方案来解决这个问题。
如果我不这样做,所有设置仍然会在那里。
我偶然发现了这个问题:
在其中一个答案中,它提到使用
reg.exe
导出密钥。所以我现在更新的想法是:
reg.exe
来创建文件。reg.exe
导入它。要么编写我自己的工具来执行相同的操作。
我确认第一步有效:
ExecAsOriginalUser(ExpandConstant('{sys}\reg.exe'), \
'export "HKEY_CURRENT_USER\Software\Company\Application" "d:\test.txt"', \
'', SW_HIDE, ewWaitUntilTerminated, ExportRegResult);
Log(SysErrorMessage(ExportRegResult));
但我用
d:\test.txt
对其进行了硬编码。我不知道如何获取临时文件名,以便我们在安装结束时将其复制到用户数据文件夹中。
Imo,这是最好的解决方案(或者不要运行旧的卸载程序)
{tmp}
常量:
ExpandConstant('{tmp}\backup.reg')
此外,
ExecAsOriginalUser
和 HKEY_CURRENT_USER
与旧(卸载)安装程序中的 HKA
Registry
条目不匹配。
我认为你应该:
Exec
– 以相同的权限并在旧(卸载)安装程序运行的同一帐户下运行 reg
。HKEY_LOCAL_MACHINE
为 true 时使用
IsAdminInstallMode
– 匹配 HKA
行为。有关 Inno Setup 中
reg.exe
错误处理的一些示例,请参阅: