[英]Visual Studio Setup Project - Per User Registry Settings
我正在尝试在Visual Studio 2003
维护一个安装项目(是的,它是一个遗留应用程序)。 我们目前的问题是我们需要为计算机上的每个用户将注册表项写入HKCU
。 它们需要在HKCU
而不是HKLM
因为它们是默认用户设置,并且它们确实会根据用户进行更改。 我的感觉是
考虑到这一点,我仍然希望在应用程序中尽可能少地更改,所以我的问题是,是否可以为Visual Studio 2003
安装项目中的每个用户添加注册表项?
并且,目前该项目列出了五个注册表根键( HKEY_CLASSES_ROOT, HKEY_CURRENT_USER
、 HKEY_LOCAL_MACHINE
、 HKEY_USERS
和 User/Machine Hive)。 我对用户根密钥一无所知,也没有看到用户/机器配置单元。 谁能告诉我它们是什么? 也许他们可以解决我上面的问题。
第一:是的,这属于应用程序中您指定的确切原因:创建新用户配置文件后会发生什么? 当然,如果您使用的是域,则可以在创建时将某些内容放入注册表,但这并不是真正的用例。 应用程序应检查是否有设置,如果没有则使用默认设置。
也就是说,可以通过 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
(代码由Jeroen Ritmeijer 提供)
我猜因为您想为所有用户设置它,所以您在某种共享计算机上,它可能在域下运行?
这里是龙
假设 Joe 和 Jane 定期登录计算机,那么他们将各自拥有“注册表”。
然后您将安装您的应用程序,安装程序将使用巨大的黑客和恶心的东西为它们设置 HKCU 下的项目。
然后,bob 会过来登录(他和其他 500 人在域中有帐户,因此可以这样做)。 他以前从未使用过这台电脑,所以他没有注册表。 他第一次登录时,Windows 会为他创建一个,但他不会拥有您的设置。
然后,您的应用程序发生故障或行为不正确,并且鲍勃大声抱怨 raynixon 公司的那些蹩脚产品。
正确的答案是在您的应用程序中有一些默认设置,如果没有找到它们,它可以将它们写入注册表。 你的应用程序永远不应该依赖于注册表,并且应该根据需要为任何注册表项创建东西,而不仅仅是 HKCU,这是一个普遍的好习惯
尽管MSDN 文章Archive of MSDN 文章关于 User/Machine Hive 有什么说法,但它并没有写入 HKEY_USERS。 相反,如果您选择 Just Me 和 HKLM 如果您选择所有人,它会写入 HKCU。
所以我的解决方案是使用用户/机器配置单元,然后在应用程序中检查注册表项是否在 HKCU 中,如果不是,则从 HKLM 复制它们。 我知道这可能不是最理想的方式,但它的变化最少。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.