每个用户注册表设置的Visual Studio安装项目
我正在尝试在Visual Studio 2003中维护一个安装项目(是的,它是一个遗留应用程序)。目前存在的问题是,我们需要为计算机上的每个用户将注册表项写入" HKCU"。它们必须位于" HKCU"中而不是" HKLM"中,因为它们是默认用户设置,并且每个用户的确会更改。我的感觉是
这是不可能的这不是安装程序应该做的事情,而是应用程序应该做的事情(毕竟在安装后创建用户配置文件时会发生什么?)。
考虑到这一点,我仍然希望在应用程序中进行尽可能少的更改,所以我的问题是,是否可以为Visual Studio 2003安装项目中的每个用户添加注册表项?
并且,目前该项目列出了五个注册表根键(" HKEY_CLASSES_ROOT"," HKEY_CURRENT_USER"," HKEY_LOCAL_MACHINE"," HKEY_USERS"和"用户/机器配置单元")。我真的对用户根密钥一无所知,也没有看到用户/机器配置单元。谁能启发我他们的面貌?也许他们可以解决我上面的问题。
解决方案:
我正在通过MSDN上的此条目进入我的## 解决方案的途中(不知道我以前怎么找不到它)。
用户/机器配置单元
当用户选择"仅我"或者HKEY_USERS蜂巢或者安装过程中用户选择"所有人"时,在此蜂巢下输入的子项和值将安装在HKEY_CURRENT_USER蜂巢下。
注册表编辑器
第一:是的,对于我们指定的确切响应,这属于应用程序中的内容:创建新用户配置文件后会发生什么?当然,如果我们使用的是域,则可能在创建时将一些内容放入注册表中,但这并不是真正的用例。应用程序应检查是否有渗漏,否则应使用默认设置。
话虽如此,可以通过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文章对用户/计算机Hive进行了说明,但它并未写入HKEY_USERS。相反,如果选择"仅我",它将写入HKCU,如果选择所有人,则写入HKCU。
因此,我的## 解决方案是使用User / Machine Hive,然后在应用程序中检查注册表项是否在HKCU中,如果不是,则从HKLM复制它们。我知道这可能不是最理想的方法,但更改量最少。