windows - visualstudio - Visual Studio安裝項目-每用戶註冊表設置




microsoft visualstudio minshell msi resources (3)

我試圖在Visual Studio 2003維護安裝項目(是的,這是一個遺留應用程序)。 目前我們HKCU的問題是,我們需要為計算機上的每個用戶編寫註冊表項給HKCU 。 他們需要在HKCU而不是HKLM因為他們是默認的用戶設置,並且他們每個用戶都會改變。 我的感覺是

  1. 這是不可能的
  2. 這不是安裝程序應該做的事情,而是應用程序應該做的事情(畢竟安裝後創建用戶配置文件後會發生什麼?)。

考慮到這一點,我仍然想在應用程序中盡可能少的改變,所以我的問題是, 是否可以在Visual Studio 2003安裝項目中為每個用戶添加註冊表項?

而且,目前項目列出了五個註冊表根密鑰( HKEY_CLASSES_ROOT, HKEY_CURRENT_USERHKEY_LOCAL_MACHINEHKEY_USERS和User / Machine Hive)。 我真的不知道關於用戶根密鑰,並沒有看到用戶/機器配置單元。 任何人都可以啟發我,他們是什麼? 也許他們可以解決我的問題上面。


我猜測,因為你想為所有用戶設置它,你在某種共享的計算機上,這可能是在一個域下運行?

這裡是龍

假設Joe和Jane定期登錄計算機,然後他們每個人都有“註冊表”。

然後,您將安裝您的應用程序,安裝程序將使用巨大的黑客和噁心的東西來為他們設置HKCU下的項目。

那麼,鮑勃會來登錄(他和其他500人在該領域的帳戶,所以可以做到這一點)。 他從來沒有使用過這台電腦,所以他沒有註冊表。 他第一次登錄時,窗戶創建了一個,但他不會有你的設置。

你的應用程序然後摔倒或表現不正確,bob大聲抱怨從raynixon納入蹩腳的產品。

正確的答案是在應用程序中只有一些默認設置,如果找不到它們,可以將它們寫入註冊表。 一般來說,您的應用程序絕對不應該依賴註冊表,而且應該根據需要創建任何註冊表項,而不僅僅是HKCU


首先:是的,這是屬於應用程序的東西,用於確定您指定的確切數量:創建新用戶配置文件後會發生什麼? 當然,如果你使用的是一個域,可能有一些東西放在註冊表中創建,但這不是一個真正的用例。 應用程序應該檢查是否存在問題,如果沒有,則使用默認設置。

也就是說,有可能通過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提供


儘管MSDN文章中介紹的有關User / Machine Hive的內容,它不會寫入HKEY_USERS。 而是寫給HKCU,如果你選擇了Just Me和HKLM,如果你選擇每個人。

所以我的解決方案是使用用戶/機器配置單元,然後在應用程序中檢查註冊表項是否在HKCU中,如果沒有,則從HKLM複製它們。 我知道這可能不是最理想的做法,但它有最少的變化。





installation