Installation 在安装较新版本的msi时维护以前创建的注册表项

Installation 在安装较新版本的msi时维护以前创建的注册表项,installation,registry,windows-installer,Installation,Registry,Windows Installer,我需要维护由早期版本的VisualStudio安装程序(msi)创建的注册表项 因此,例如,如果我有一个产品,产品名为“product 1”版本1.0.1,它会创建一个注册表项“HKCU\Software\product 1”,并在该注册表中创建一个由安装的应用程序更新的“Username”值 已安装的应用程序将用户的用户名持久化为“HKCU\Software\Product 1\username”,我现在需要使用Visual Studio Installer project发布一个新版本,新版

我需要维护由早期版本的VisualStudio安装程序(msi)创建的注册表项

因此,例如,如果我有一个产品,产品名为“product 1”版本1.0.1,它会创建一个注册表项
“HKCU\Software\product 1”
,并在该注册表中创建一个由安装的应用程序更新的
“Username
”值

已安装的应用程序将用户的用户名持久化为
“HKCU\Software\Product 1\username”
,我现在需要使用Visual Studio Installer project发布一个新版本,新版本的版本为1.0.2

如果我在安装程序项目中将
“RemovePreviousVersion”
设置为
true
,则先前版本创建的注册表项将被删除,存储的用户名将被删除,并要求用户重新输入用户名


如何卸载以前的版本而不删除注册表项和值
“HKCU\Software\Product 1\Username”

您只需要为新版本使用相同的用户名,还是希望将旧条目保留在注册表中

如果您只想读取用户名,这样就不会要求用户再次输入,这很简单。我在下面解释了怎么做


将旧版本的注册表保留在机器上有点棘手,我不建议这样做。据我所知,您只想重新使用注册表中的值,因为新版本将写回注册表。

是的,我确实想保留旧值。这就是问题所在。如果新安装程序可以读取旧值,并在卸载以前的版本后将其还原,这将起作用。是的,它可以读取旧值,如我的答案中的链接所示。然后,您只需从新版本安装程序将其写回注册表。