2011-10-13 107 views
-1

這是在後臺工作中運行 問題似乎與註冊表檢查密鑰FS是否錯過了它的錯誤。 我正在做這個檢查,以防萬一有人刪除它,即使安裝程序添加了值。 也想知道爲什麼消息框不工作C#註冊表問題

//I DONT EVEN GET TO THIS MESSAGE BOX BEFORE THE ERROR 
    //BUT THE CATCH IS TRIGGERED FROM THE TRY BLOCK 
    MessageBox.Show("Entered Version Check"); 
    try 
    { 
     //DONT GET TO SEE THIS MESSAGE BOX 
     MessageBox.Show("Entered try"); 
     DirectoryInfo Temp = new DirectoryInfo(Path.GetTempPath()); 
     RegistryKey rk = Registry.LocalMachine.OpenSubKey("Software\\My Application Here"); 
     string val; 
     if (rk != null) 
      { 
       val = rk.GetValue("FS").ToString(); 
       if (val == null) 
       { 
        MessageBox.Show("It appears that you do not have a File Server IP address configured" + Environment.NewLine + "Please login to the admin tools and set it", "No File Server Set", MessageBoxButtons.OK, MessageBoxIcon.Error); 
        return; 
       } 
      } 
+0

根據您的意見錯誤發生在第一行代碼之前。如果您不向我們顯示代碼,那麼很難確定導致錯誤的原因。 –

+0

Windows窗體應用程序?你甚至可以使用後臺線程的GUI?如果你在前臺做它,它會起作用嗎? –

+0

@JohnSaunders是的,MessageBox.Show()調用可以從後臺線程進行,但它們不會對主UI線程模態化。後臺線程嘗試直接訪問UI線程上的控件是很危險的。 –

回答

1
  val = rk.GetValue("FS").ToString(); 

如果GetValue()返回null,將會發生炸彈。 第一個在嘗試ToString()之前檢查null。並在BGW的RunWorkerCompleted事件處理程序中添加一個檢查,以便驗證e.Error。並且不要在工作線程中顯示消息框,很可能它們會消失在另一個應用程序(包括您自己的應用程序)的窗口後面。

1

最常見的問題是這樣我已經看到了有關64位註冊表重定向。您是否在64位操作系統上運行,並將您的應用程序編譯爲32位?如果是這樣,註冊表調用將被重定向。

請在您的密鑰的HKLM\SOFTWARE\Wow6432Node鍵下查找,或者將您的應用程序編譯爲64位。

+0

它在32位機器上運行 – Tsukasa

+0

這是我的問題。 – lostcitizen