Windows注册表存储最佳实践

时间:2017-09-29 22:44:53

标签: windows installer

背景

我最近被分流到了Windows编程世界,我仍然试图找到最佳实践和做事方式。所以我只是希望有关使用注册表的一些指示

不是特别相关,但背景是我在Golang中创建一个安装程序,有几点可以解决这个问题:

  • 我知道MSI通常是安装程序的最佳实践(我有自定义exe的原因)

  • 我知道有比golang更明显的语言选择,只需使用它

当前注册表使用

作为安装过程的一部分,我在注册表中存储了几个数据:

运行一次命令:

  

电脑\ HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows \ CurrentVersion \的RunOnce

我在这里创建了一些条目:在系统重启后重新启动进程并在卸载后重新启动时删除一些临时文件

卸载条目:

  

电脑\ HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows \ CurrentVersion \卸载\供应商   产品

此处的内容与MSI创建的内容相同,我注意不要在此处创建任何其他自定义字段(卸载前的所有静态数据)

申请条目:

  

计算机\ HKEY_LOCAL_MACHINE \ SOFTWARE \卖方\产品

我在这里存储了一些有关安装的附加数据,其中一些是卸载所需的,例如安装前的状态信息(同样是所有静态内容)

临时条目:

  

计算机\ HKEY_CURRENT_USER \ SOFTWARE \卖方\产品

我在这里存储了一些临时数据,其中可能包含一些敏感用户输入的数据(用户名/密码)。我运行一些对称加密来模糊数据虽然我的理解是这是注册表的区域是加密的,所以只有用户可以访问(想要确认) 此数据用于在重新启动后恢复,然后删除

问题

  1. 我正在寻找对我目前使用注册表的确认/更正?
  2. 我现在需要在应用程序和正在运行的服务之间传递一些数据,这些数据每1-2分钟更新一次,并且是几个字节的JSON。注册表看起来像存储这样的可变数据的合理位置吗?如果是这样,有一个特定的地方更适合可变数据 - 我打算将它添加到: 计算机\ HKEY_LOCAL_MACHINE \ SOFTWARE \卖方\产品

1 个答案:

答案 0 :(得分:2)

据我所知,HCKU未加密。它存储在名为NTUser.dat的文件中,可以作为HKEY_USERS下的配置单元加载,并且对具有足够权限的其他进程可见。

如果您希望用户私有进程能够写入,则需要打开HKLM \ SOFTWARE \ Vendor \ Product的权限。如果要将数据传递给服务,可能需要使用某种IPC管道来执行此操作。不知道Golang有什么可用的。