2016-12-01 85 views
0

我正在研究一個C#項目,我對創建註冊表項非常困惑。以編程方式創建註冊表項

我有一個Wix安裝程序。和設置文件,我打電話給一個自定義操作來創建子密鑰(我嘗試了wix功能,但它沒有工作)。

我的自定義操作是:安裝

RegistryKey Nkey = Registry.LocalMachine; 
RegistryKey valkey = Nkey.OpenSubKey(Manager.REGKEY, true); //=> REGKEY = "Software\\MyService" 
if (valkey == null) 
{ 
    valkey = Nkey.CreateSubKey(GestionCertificats.REGKEY); 
} 
valkey.Close(); 

Registry.LocalMachine.CreateSubKey(@"SYSTEM\CurrentControlSet\services\eventlog\Application\MyService"); 

後,我可以看到第二個關鍵,但沒有第一個。我不確定要正確理解按鍵的操作。我正在研究Windows 7 64位,我正在編譯「任何CPU」,但我的應用程序似乎在x86中。

我已嘗試調試該操作。值valkey不爲空,但我沒有看到註冊表中的密鑰。通過強制CreateSubKey我還沒有鑰匙。

我不知道該怎麼做,我需要幫助。

+0

您需要管理員權限才能寫入LocalMachine。你是否以正確的權限運行安裝程序? – ChrisF

+0

是的,我有窗戶要求授權。我有另一個自定義操作用於寫在一個正在工作的管理文件夾中。 –

+0

我認爲你應該在路徑中使用\\而不僅僅是\? –

回答

1

只是一個猜測,因爲一切都看起來沒問題。

嘗試關閉返回的密鑰。關於清除資源的密鑰處理的描述,但並未說明它會刷新資源。

RegistryKey key = Registry.LocalMachine.CreateSubKey(@"SYSTEM\CurrentControlSet\services\eventlog\Application\MyService"); 
key.Close(); 
+0

這是基本32/64之間的問題。通過:註冊表鍵值= RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,Environment.Is64BitOperatingSystem?RegistryView.Registry64:RegistryView.Registry32);'和它的工作原理你是唯一回答,我把你的答案;-) –