从windows注册表C#windows应用程序写入和读取

从windows注册表C#windows应用程序写入和读取,c#,.net,winforms,C#,.net,Winforms,以编程方式,我希望保留并保存某个计数(将该计数的值写入并更新到注册表),但即使在使用我创建的MSI安装程序卸载和重新安装windows窗体应用程序时,该计数也不会从注册表中消失(删除) 即使在重新安装时,我也希望从注册表中读取旧值。 这是一种我想一直跟踪那个值的东西 如何使之成为可能?在.NET Framework中有一个注册表类 Microsoft.Win32.Registry .CurrentUser .OpenSubKey(@"Software\YourApplicatio

以编程方式,我希望保留并保存某个计数(将该计数的值写入并更新到注册表),但即使在使用我创建的MSI安装程序卸载和重新安装windows窗体应用程序时,该计数也不会从注册表中消失(删除)

即使在重新安装时,我也希望从注册表中读取旧值。 这是一种我想一直跟踪那个值的东西


如何使之成为可能?

在.NET Framework中有一个
注册表

Microsoft.Win32.Registry
    .CurrentUser
    .OpenSubKey(@"Software\YourApplication")
    .SetValue("ConfigValue1", example);
(当然,您必须先创建“YourApplication”键,这只是一个示例)

就这么简单,也不言自明


此外,这些值不会被删除,除非您告诉安装程序删除。由于您没有告诉我们有关安装程序的更多信息,我认为您在这里的主要问题是处理注册表写入/读取。

如果您能够在部署项目中创建注册表项,那么在卸载过程中让它不使用注册表项是相当容易的

在安装程序的注册表编辑器窗口中,选择要保留的项并打开属性选项卡。这里有两个属性DeleteAtUninstall,用于确定卸载程序是否删除密钥。和可传递性,确定重新安装是否会重新检查钥匙。我相信,如果你有你的微星修复安装,这也是使用


如果您没有在MSI中创建注册表项(如果它不存在,则在运行时创建),并且您没有让MSI知道它,则卸载程序不会删除它。与运行时创建的文件相同

您需要决定是否要保存每个用户或每台机器的值

using Microsoft.Win32;
...
//var root = Registry.LocalMachine
var root = Registry.CurrentUser;
//Use Create Sub Key to 'Creates a new subkey or opens an existing subkey for write access'
root.CreateSubKey("YourKey").SetValue("MyInt", val);

看看这篇文章谢谢@Learner,使用MSI安装程序可行吗?你是如何创建MSI的?