C#注册表问题

时间:2011-10-13 14:36:56

标签: c# object registry backgroundworker

这是在后台工作程序中运行的 问题似乎在于注册表检查密钥FS是否缺少错误。 我正在进行此检查以防万一有人删除它,即使安装程序添加了值。 还想知道为什么消息框不起作用

    //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;
                }
            }

2 个答案:

答案 0 :(得分:1)

我见过这样的最常见问题与64位注册表重定向有关。你在64位操作系统上运行,你的应用程序编译为32位吗?如果是这样,注册表调用将被重定向。

查看密钥的HKLM\SOFTWARE\Wow6432Node密钥,或将应用程序编译为64位。

答案 1 :(得分:1)

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

如果GetValue()返回null,那将会爆炸。在尝试ToString()之前,首先检查null。并在BGW的RunWorkerCompleted事件处理程序中添加一个检查,以便您可以验证e.Error。并且不要在工作线程中显示消息框,很可能它们会在另一个应用程序的窗口后面消失,包括你自己的。