Visual Studio 安装项目 - 每用户注册表设置
-
08-06-2019 - |
题
我正在尝试维护一个安装项目 Visual Studio 2003
(是的,这是一个遗留应用程序)。目前我们遇到的问题是我们需要将注册表项写入 HKCU
对于计算机上的每个用户。他们需要在 HKCU
而不是 HKLM
因为它们是默认的用户设置,并且每个用户都会更改。我的感觉是
- 这是不可能的
- 这不是安装程序应该做的事情,而是应用程序应该做的事情(毕竟安装后创建用户配置文件时会发生什么?)。
考虑到这一点,我仍然希望在应用程序中尽可能少地进行更改,所以我的问题是, 是否可以为每个用户添加注册表项 Visual Studio 2003
设置项目?
并且,目前该项目列出了五个注册表根键(HKEY_CLASSES_ROOT, HKEY_CURRENT_USER
, HKEY_LOCAL_MACHINE
, HKEY_USERS
, ,以及用户/机器配置单元)。我对用户根密钥一无所知,也没有看到用户/机器配置单元。谁能告诉我它们是什么?也许他们可以解决我上面的问题。
解决方案
第一的:是的,这是属于您指定的应用程序中的内容:创建新用户配置文件后会发生什么?当然,如果您使用域,则可以在创建时将一些内容放入注册表中,但这并不是真正的用例。应用程序应检查是否有设置,如果没有,则使用默认设置。
话虽如此,可以通过 HKEY_USERS Hive 更改其他用户密钥。
我没有使用 Visual Studio 2003 安装项目的经验,因此这里有一些(完全不相关的)VBScript 代码,可能只是让您了解在哪里查看:
const HKEY_USERS = &H80000003
strComputer = "."
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = ""
objReg.EnumKey HKEY_USERS, strKeyPath, arrSubKeys
strKeyPath = "\Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing"
For Each subkey In arrSubKeys
objReg.SetDWORDValue HKEY_USERS, subkey & strKeyPath, "State", 146944
Next
(代码由 杰罗恩·里特梅杰)
其他提示
我猜因为您想为所有用户设置它,所以您位于某种共享计算机上,该计算机可能在域下运行?
这里有龙
假设乔和简定期登录计算机,那么他们每个人都有“注册表”。
然后你将安装你的应用程序,安装程序将使用巨大的黑客和恶心的东西来为他们设置 HKCU 下的项目。
然后,鲍勃将出现并登录(他和其他 500 个人在域中拥有帐户,因此可以执行此操作)。他以前从未使用过这台计算机,因此没有注册表。当他第一次登录时,Windows 会为他创建一个,但他不会拥有您的设置。
然后你的应用程序崩溃或运行不正常,鲍勃大声抱怨雷尼克森公司的那些蹩脚产品。
正确的答案是在您的应用程序中只保留一些默认设置,如果找不到它们,可以将它们写入注册表。通常的良好做法是,您的应用程序永远不应该依赖于注册表,并且应该根据需要为任何注册表项创建内容,而不仅仅是 HKCU