2008-08-03 142 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複製它們。我知道這可能不是最理想的做法,但它的變化最小。