Visual Studio安装项目 - 每用户注册表设置

我试图在 Visual Studio 2003 中维护安装项目(是的,它是一个遗留应用程序)。我们目前遇到的问题是,我们需要为计算机上的每个用户写入注册表项到 HKCU 。他们需要位于 HKCU 而不是 HKLM 中,因为它们是默认的用户设置,并且每个用户都会更改。我的感觉是

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

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

并且,此时项目列出了五个注册表根密钥( HKEY_CLASSES_ROOT,HKEY_CURRENT_USERHKEY_LOCAL_MACHINEHKEY_USERS 和User / Machine Hive)。我真的不知道关于用户根密钥的任何信息,也没有看到用户/机器配置单元。任何人都可以启发我他们是什么?也许他们可以解决我的问题。

0
额外 编辑
意见: 1
感谢这个问题
额外 作者 Danny G,

4 答案

首先:是的,这是属于应用程序的东西,用于确定您指定的精确值:创建新用户配置文件后会发生什么?当然,如果您使用的是域名,可能会在注册表中创建一些内容,但这不是真正的用例。应用程序应检查是否存在问题,如果不存在,则使用默认设置。

也就是说,通过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 提供)

0
额外

我对MSDN上的这个条目的解决方案有了一些了解(不知道我以前怎么找不到它)。

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

注册表编辑器

0
额外

尽管 MSDN文章对用户/机器配置单元,它不写入HKEY_USERS。相反,如果您选择每个人,只要选择Just Me和HKLM,就可以给HKCU写信。

所以我的解决方案是使用User / Machine Hive,然后在应用程序中检查注册表项是否在HKCU中,如果没有,则从HKLM复制注册表项。我知道这可能不是最理想的做法,但它的变化最小。

0
额外

我猜是因为你想为所有用户设置它,你在某种共享计算机上,这可能是在一个域下运行的?

这里是龙

假设Joe和Jane定期登录计算机,然后他们每个人都有'注册管理机构'。

然后,您将安装您的应用程序,安装程序将使用巨大的黑客和恶心的东西来为他们设置HKCU下的项目。

那么,鲍勃会过来登录(他和其他500人在该领域的帐户,所以可以做到这一点)。他之前从未使用过这台电脑,所以他没有注册表。他第一次登录时,窗户创建了他,但他不会拥有你的设置。

你的应用程序然后摔倒或表现不正确,bob大声抱怨来自raynixon的糟糕产品。

正确的答案是在你的应用程序中只有一些默认设置,如果它没有找到它们,可以将它们写入注册表。一般的良好做法是,您的应用程序永远不应依赖注册表,并且应根据需要创建任何注册表项,而不仅仅是HKCU

0
额外