关于Windows:Visual Studio安装项目-每个用户注册表设置

关于Windows:Visual Studio安装项目-每个用户注册表设置

Visual Studio Setup Project - Per User Registry Settings

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

  • 这不可能
  • 这不是安装程序应该做的事情,而是应用程序应该做的事情(毕竟在安装后创建用户配置文件时会发生什么?)。
  • 考虑到这一点,我仍然希望在应用程序中进行尽可能少的更改,所以我的问题是,是否可以为Visual Studio 2003安装项目中的每个用户添加注册表项?

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


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

    这里是龙

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

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

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

    您的应用然后掉下来或表现不正常,并且鲍勃大声抱怨合并了raynixon的那些糟糕的产品。

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


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

    话虽如此,可以通过HKEY_USERS配置单元更改其他用户密钥。

    我没有使用Visual Studio 2003安装项目的经验,所以这里有一些(完全不相关的)VBScript代码,它们可能会让您知道在哪里查看:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    const HKEY_USERS = &H80000003
    strComputer ="."
    Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\" & strComputer &"\
    oot\\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提供)


    尽管MSDN文章的 MSDN文章关于用户/计算机Hive的内容,但它不会写入HKEY_USERS。相反,如果选择"仅我",它将写入HKCU,如果选择每个人,它将写入HKLM。

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


    我正在使用MSDN上的此条目来解决我的问题(以前我不知道怎么找不到它)。

    用户/机器配置单元
    如果用户在安装过程中选择"仅我"或HKEY_USERS配置单元,或者用户选择"所有人",则在该配置单元下输入的子项和值将安装在HKEY_CURRENT_USER配置单元下。

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


    推荐阅读