2011-10-13 109 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