上网搜索了一段有关从注册表中取得指定软件的路径的代码
如要获得ArcGIS的安装路径
代码如下:
         private void Form1_Load(object sender, EventArgs e)
        {
            string sInstall = ReadRegistry("SOFTWARE\\ESRI\\CoreRuntime");        }
        private string ReadRegistry(string p)
        {
            /// <summary> 
            /// 从注册表中取得指定软件的路径            /// </summary>            /// <param name="sKey"></param>            /// <returns></returns>            //Open the subkey for reading            Microsoft.Win32.RegistryKey rk = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(p, true);            if (rk == null) return "";            // Get the data from a specified item in the key.            return (string)rk.GetValue("InstallDir");
        }
  调试代码是发现没有获得安装路径 变量sInstall的值始终为null
  哪位朋友知道是什么原因来着?

解决方案 »

  1.   

    //打开注册表
                RegistryKey regKey = Registry.ClassesRoot;
                string SubKeyPath = null;
                RegistryKey optionKey = null;
                // 修改2003的Word对应的注册表
                SubKeyPath = @"Word.Document.8";
                optionKey = regKey.OpenSubKey(SubKeyPath, true);
                if (optionKey != null)
                {
                    //更改健值,设置代理,
                    optionKey.SetValue("BrowserFlags", 2147483684);
                    optionKey.SetValue("EditFlags", 65536);
                }            // 修改高版本的Word 2007
                SubKeyPath = @"Word.Document.12";
                optionKey = regKey.OpenSubKey(SubKeyPath, true);
                if (optionKey != null)
                {
                    //更改健值,设置代理,
                    optionKey.SetValue("BrowserFlags", 2147483684);
                    optionKey.SetValue("EditFlags", 65536);
                }这是我写的。。你可以参考一下。。
      

  2.   

    先用regedit.exe查看一下注册表该位置中是否存在软件路径。
      

  3.   

    楼主的代码没问题,只要把参数传对了,就能返回正确的结果。
    如果没安装这个软件,当然返回值是空了.用regedit.exe 可以查找发现:
    键 HKEY_LOCAL_MACHINE\SOFTWARE\Tencent\QQ2009
    项 Install下面这段代码,返回qq2009的安装路径。private void button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show(ReadRegistry(@"SOFTWARE\Tencent\QQ2009"));

     
    private string ReadRegistry(string p)
    {
        RegistryKey rk = Registry.LocalMachine.OpenSubKey(p, true);
        if (rk == null) return "";
        return (string)rk.GetValue("Install");
    }
      

  4.   

    我按照lzsh0622这位朋友的方法试了获取qq2009的按照路径没有问题呢 
    但是为什么获取ARCGIS的安装路径时就有问题呢
    我安装了ARCGIS9.2
    那么获取其安装路径 传的参数是什么啊?我传的是@"SOFTWARE\ESRI\ARCGIS"
      

  5.   

    代码没问题,看看Microsoft.Win32.Registry.LocalMachine属性对应的注册表的节点(HKEY_LOCAL_MACHINE)的software里有没有esri项
    或者Microsoft.Win32.Registry.CurrentUser属性对应HKEY_CURRENT_USER节点有没有
    最好你的方法里在这两个节点里找,先找到就return,如果都没有肯定返回null
      

  6.   

    开始菜单——运行——regedit注册表编辑器中:
    定位到 HKEY_LOCAL_MACHINE\SOFTWARE\下面
    查找 “ESRI”,看看有没有这个键
    再展开看有没“ARCGIS”。
      

  7.   


    多谢各位的热心帮助呢 
    问题解决了  贴出来给大家分享下 嘿嘿        private void Form1_Load(object sender, EventArgs e)
            {
                string sInstall = ReadRegistry("SOFTWARE\\ESRI\\ArcGIS Engine Runtime");        }        private string ReadRegistry(string p)
            {
                /// <summary> 
                /// 从注册表中取得指定软件的路径            /// </summary>            /// <param name="sKey"></param>            /// <returns></returns>            
                RegistryKey rk = Registry.LocalMachine.OpenSubKey(p);
                if (rk == null) return "";
                return (string)rk.GetValue("InstallDir");        }
    注意红色标注的部分
      

  8.   

     晕死 插入源码就不给标注了啊 
     回的帖又说我没有权限编辑及删除
     那再回复一个吧 
           private void Form1_Load(object sender, EventArgs e)
            {
                string sInstall = ReadRegistry("SOFTWARE\\ESRI\\ArcGIS Engine Runtime");        }        private string ReadRegistry(string p)
            {
                /// <summary> 
                /// 从注册表中取得指定软件的路径            /// </summary>            /// <param name="sKey"></param>            /// <returns></returns>            
                RegistryKey rk = Registry.LocalMachine.OpenSubKey(p);
                if (rk == null) return "";
                return (string)rk.GetValue("InstallDir");        }注意红色标注部分 是修改的部分 
    这样运行就没有问题了 
    OK  结贴了