windows -Visual Studio安装程序项目-每个用户的注册表设置

Translate

我正在尝试维护一个安装项目Visual Studio 2003(是的,这是旧版应用程序)。目前的问题是我们需要将注册表项写入HKCU对于计算机上的每个用户。他们需要在HKCU而不是HKLM因为它们是默认的用户设置,并且每个用户的确会更改。我的感觉是

  1. 这不可能
  2. 这不是安装程序应该做的事情,而是应用程序应该做的事情(毕竟在安装后创建用户配置文件时会发生什么?)。

考虑到这一点,我仍然想在应用程序中进行尽可能小的更改,所以我的问题是,是否可以为每个用户添加注册表项Visual Studio 2003安装项目?

并且,目前该项目列出了五个注册表根键(HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS,以及用户/机器配置单元)。我真的对用户根密钥一无所知,也没有看到用户/机器配置单元。谁能启发我他们的面貌?也许他们可以解决我上面的问题。

This question and all comments follow the "Attribution Required."

所有的回答

Translate

第一:是的,对于您指定的确切原因,这属于应用程序中的内容:创建新的用户配置文件后会发生什么?当然,如果您使用的是域,则可能在创建时将一些内容放入注册表中,但这并不是真正的用例。应用程序应检查是否有渗漏,如果没有,则使用默认设置。

话虽如此,可以通过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))

来源
Translate

我猜是因为要为所有用户设置它,所以您在某种共享计算机上,该计算机可能在域下运行?

这里是龙

假设Joe和Jane定期登录计算机,那么他们每个人都有“注册表”。

然后,您将安装应用程序,安装程序将使用巨大的骇客和令人作呕的东西为HKCU设置项目。

然后,bob会出现并登录(他和其他500位用户在域中都有帐户,因此可以执行此操作)。他以前从未使用过这台计算机,因此没有注册表。他第一次登录时,Windows会为他创建一个,但是他没有您的设置。

然后,您的应用程序摔倒或行为不正常,鲍勃大声抱怨合并了raynixon的那些糟糕的产品。

正确的答案是在您的应用程序中仅包含一些默认设置,如果找不到这些默认设置,则可以将其写入注册表。通常的良好做法是,您的应用程序永远不要依赖注册表,并且应该为任何注册表项(不仅限于HKCU)创建所需的内容

来源
Ray
Translate

尽管MSDN文章 MSDN文章的存档说到用户/机器配置单元,它不会写入HKEY_USERS。相反,如果选择“仅我”,它将写入HKCU,如果选择每个人,它将写入HKLM。

因此,我的解决方案是使用User / Machine Hive,然后在应用程序中检查注册表项是否在HKCU中,如果不是,则从HKLM复制它们。我知道这可能不是最理想的方法,但更改量最少。

来源
Ray
Translate

我正在通过MSDN上的此条目进入我的解决方案的途中(不知道我以前怎么找不到它)。

用户/机器配置单元
当用户选择“ Just Me”或“ HKEY_USERS”配置单元或安装过程中用户选择“所有人”时,在此配置单元下输入的子项和值将安装在HKEY_CURRENT_USER配置单元下。

注册表编辑器 MSDN文章的存档

来源