2008-08-03 97 views
15

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

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

考虑到这一点,我还是想在应用程序中改变尽可能少的,所以我的问题是,是可以添加注册表项以Visual Studio 2003安装项目每个用户?

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

+0

感谢这个问题 – 2009-03-15 21:17:00

回答

5

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

也就是说,有可能通过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

1

我对MSDN上这个条目的解决方案中途中途(不知道我以前怎么找不到)。

用户/机器配置单元
子项和值此配置单元下进入将注册表配置单元下安装,当用户选择“只要我”或HKEY_USERS蜂巢或者当用户在安装过程中选择“每个人”。

Registry Editor

5

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

在这里DRAGONS

比方说,乔和简经常登录到计算机上,那么他们将各有“登记”。

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

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

你的应用程序然后摔倒或行为不正确,bob大声抱怨从raynixon纳入蹩脚的产品。

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

1

尽管MSDN article对用户/机器配置单元所说的事情没有写入HKEY_USERS。相反,如果您选择每个人,只要选择Just Me和HKLM,就可以给HKCU写信。

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

相关问题