2009-10-08 22 views
4

我使用下面的代碼添加註冊表項:添加註冊表項顯示,當我讀回,但不是在註冊表編輯器

var key = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(key); 

在我的代碼,我可以回讀的價值發現,即使是在在運行之間。但是,密鑰從未在註冊表中顯示,而另一個應讀密鑰的程序無法看到它。

該程序在Vista上運行,擁有更高的權限。

回答

16

Vista引入註冊表虛擬化; 「全球性」註冊表的變化,在某些情況下,重定向到用戶指定的地點:

註冊表虛擬化是一個 應用程序兼容技術 ,使註冊表寫入操作 具有全球影響力是 重定向到per-用戶位置。此 重定向對 應用程序透明或將 寫入註冊表是透明的。它支持從Windows Vista開始的 。

這種虛擬化形式是 臨時應用程序兼容性 技術;微軟計劃將 從未來版本的 Windows操作系統中刪除,因爲更多 應用程序與Windows Vista的 兼容。因此, 重要的是,您的應用程序確實 不依賴 系統中註冊表虛擬化的行爲 。

您可以通過customizing your application manifest禁用此功能,或者您也可以modify policy只是關鍵你是感人。

WOW64(你運行的是Vista的64位版本嗎?)also does registry redirection。這讓我感到煩惱。

查看MSDN article on registry virtualization

0

你可以說你在註冊表中看到哪個配置單元嗎?我的第一個猜測是你可能會意外地看錯了地方。

+2

他的代碼顯示訪問LocalMachine。 – Bevan 2009-10-08 23:26:14

0

聽起來對我來說,即使你認爲你正在使用提升的權限運行,你沒有 - 而且你的程序註冊表訪問正在悄悄地重定向到某個安全的地方。

查看詳情Registry Virtualization

0

您可能沒有您認爲您的特權。使用UAC時,如果您沒有足夠的權限寫入「真實」註冊表(文件系統同樣如此),則操作系統將創建一個虛擬註冊表供您寫入。

3

這聽起來像是一個registry virtualisation問題。如果您的應用的用戶不是管理員,那麼註冊表寫入將被虛擬化爲每個用戶的虛擬商店 - 儘管如果您的其他程序在同一個帳戶下運行,那麼它仍應該能夠看到每個用戶設置...

鏈接頁告訴你在哪裏找到虛擬商店來檢查這個理論。