2010-02-26 66 views
0

我想在我的C#代碼中設置一個註冊表項,但它不會一直工作。有時它確實起作用,有時它不起作用。我開始變得瘋狂...... 在以前的項目中,我沒有任何問題可以寫入和閱讀註冊表,但我現在就可以做到。設置註冊表項不起作用。有時

下面是我使用的代碼:

string newVersion = "10A"; 
RegistryKey key = null; 
try 
{ 
    key = Registry.CurrentUser.CreateSubKey("Software\\stuff1\\stuff2 " + newVersion + "\\" + newVersion + "\\stuff3\\Settings", RegistryKeyPermissionCheck.ReadWriteSubTree); 
    key.SetValue("CopyConvertDone", "1", RegistryValueKind.String); 
    key.Flush(); 
    rep.Message("CopyConvertDone registry key set for revision: " + newVersion); 
} 
catch (Exception e) 
{ 
    rep.Error(e); 
} 
finally 
{ 
    if (key != null) 
    { 
     key.Close(); 
    } 
    else 
    { 
     rep.Error("Registry key is set to null."); 
    } 
} 

我已經嘗試過,但沒有工作: - 而不是使用CreateSubKey我試圖OpenSubKey設置爲true寫參數。 - 增加了.Flush()方法。 - 在進行我的程序(需要此註冊表項)之前,讓Thread.Pause(2000)給了它一段時間(它需要此註冊表項)

我沒有收到任何錯誤並且子項已存在,但值(CopyConvertDone)doesn 「T。

任何人都可以看到這個代碼中的問題,並有一個可能的解決方案?

+0

你能否澄清當它失敗時會發生什麼 - 你是否得到某種異常或只是在註冊表中沒有改變? – glenatron 2010-02-26 14:35:50

+0

上面的代碼實際上被調用了嗎? – 2010-02-26 14:36:22

回答

3

這段代碼對我來說看起來不錯,但是如果它的某些時間正在工作,那麼可能使用Process Monitor來查看對註冊表進行了哪些調用以及哪些成功/失敗。

0

看起來正確。也許嘗試刪除Flush。來自MSDN:An application should only call Flush if it must be absolute certain that registry changes are recorded to disk. In general, Flush rarely, if ever, need be used.

您已經在finally語句中關閉RegistryKey。

2

剛剛發生了類似的事情,並使用安東尼建議的進程監視器,我發現Windows 7將我的寫入重定向到HKCU\Software\Classes\VirtualStore\MACHINE下的一個密鑰。

只是一個指針,以防其他人有這個問題。

+0

看到這個SO回答爲解釋爲什麼:http://stackoverflow.com/a/10941367/155167 – Mario 2015-12-16 19:33:08