2012-07-11 30 views
4

我寫一個C#應用程序HKEY_USERS僅包含已登錄用戶

由於我的應用程序的一部分,我需要讀取用戶的配置文件。

爲了讓所有的用戶,我使用Registry.Users.GetSubKey()

問題是在Windows 8上HKEY_USERS只包含登錄的用戶! (當有用戶登錄我wiil看到HKEY_USERS下2級的用戶,但是如果一個用戶將註銷,則會有HKEY_USERS下只有1個用戶)

其結果是,我得到的配置文件僅適用於登錄用戶。

我試圖搜索整個註冊表中找到其中的數據被保存,但我找不到該信息的任何地方....好像當用戶註銷的信息不見了。

是通過設計還是錯誤?

當數據被保存 - 它必須是在註冊表中,但我不能找到它...

這可能是一些在權限?也許信息存在,但當用戶未登錄時隱藏信息?是否有標誌或我可以用來讀取未登錄用戶的個人資料?

+0

是用戶下下'HKU'的'S-1-5'鍵不章?即使我是唯一登錄的用戶,我的電腦上也有每個用戶的密鑰。 – 2012-07-11 11:37:46

+0

您使用的是win8嗎?無論如何,像S-1-5-18,S-1-5-19等用戶不是普通用戶,他們是用戶喜歡系統,本地服務等 – user844541 2012-07-11 11:44:10

+0

道歉,我使用Win7,我wasn' t知道18,19等不是常規賬戶。你每天學習新的東西! – 2012-07-11 11:47:20

回答

7

由於我的應用程序的一部分,我需要讀取用戶的配置文件。

然後,你需要重新設計應用程序。你所要求的是不可能的。

Raymond Chen's blog post, "Beware of roaming user profiles"

[Y] OU不能僅僅通過在HKEY_LOCAL_MACHINE \ SOFTWARE \微軟\的Windows NT \ CURRENTVERSION \ ProfileList文件的註冊表項期望發現所有的用戶配置文件,甚至可能修改它們的巡航,因爲本地計算機上用戶配置文件的副本可能不是權威性的。

任何你在本地機器上看到與其他用戶的個人資料 - 無論是HKEY_USERS下,或在C的配置文件目錄:\用戶 - 只是一個本地緩存從他們記錄的最後一次在那臺機器上。數據,即最新的數據,存儲在某個域控制器上。

對於什麼都不能依賴其他用戶的本地存儲的配置文件數據。你最好假裝它甚至不在那裏。

+0

那麼我如何獲得這些數據呢? – user844541 2012-07-11 13:30:08

3

這可能不適用於所有情況,但適合我的需求。加載註冊表配置單元

reg load HKU\Steven C:\Users\Steven\ntuser.dat 

閱讀必要的數據,然後卸載

reg unload HKU\Steven 

Example

+0

謝謝!很有用的解決方案 – VoidVolker 2015-10-21 21:19:39

+0

失敗,工作不好 - 它只會以未知原因打開。我發現另一種方法:從SYSTEM用戶啓動程序:nircmd.exe elevatecmd runassystem 並在HKU中將包含所有用戶。 – VoidVolker 2015-11-12 17:23:30