Используете значение реестра для запуска приложения?что с этим не так?.net 2.0 ТОЛЬКО пожалуйста - PullRequest
3 голосов
/ 30 июля 2010

Я пытаюсь написать небольшой фрагмент кода, который извлекает путь установки приложения и использует его + имя приложения для запуска приложения по щелчку. Это то, что у меня есть, но я продолжаю получать сообщение об ошибке «Ссылка на объект не установлена ​​на экземпляр объекта». Это код, который я пытаюсь использовать, что не так?

RegistryKey Copen = Registry.LocalMachine.OpenSubKey(@"Software\ComodoGroup\CDI\1\");
Copen.GetValue("InstallProductPath");
System.Diagnostics.Process.Start(Copen + "cfp.exe");

Ответы [ 2 ]

2 голосов
/ 30 июля 2010

Вы на самом деле не сохраняете полученное вами значение.Попробуйте это:

RegistryKey Copen = Registry.LocalMachine.OpenSubKey(@"Software\ComodoGroup\CDI\1\", RegistryKeyPermissionCheck.ReadSubTree);
if(Copen != null)
{
    object o = Copen.GetValue("InstallProductPath");
    if(o != null)
    {
         System.Diagnostics.Process.Start(IO.Path.Combine(o.ToString(), "cfp.exe"));
    }
    else
        MessageBox.Show("Value not found");
}
else
    MessageBox.Show("Failed to open key");

Отредактировано: также проверить NULL, как Мартин упомянул

0 голосов
/ 30 июля 2010

Ваш вызов Registry.LocalMachine.OpenSubKey или GetValue может завершиться неудачно, а затем он возвращает значение NULL. Затем, когда они используются, вы получите исключение нулевой ссылки.

Попытайтесь проверить, являются ли какие-либо значения, возвращаемые этими методами, нулевыми. Примерно так:

RegistryKey key = Registry.LocalMachine.OpenSubKey(@"Software\ComodoGroup\CDI\1");
if (key != null)
{
   object = installProductPath = key.GetValue("InstallProductPath");
   // You could also supply a default value like this:
   // installProductPath = key.GetValue("InstallProductPath", @"C:\The\Default\Path");
   if (installProductPath != null)
   {
       System.Diagnostics.Process.Start(Path.Combine(installProductPath.ToString() + "cfp.exe"); 
   }
}

Редактировать

Полагаю, вы просто написали эту строку неправильно, но вы указываете не значение, а значение RegistryKey:

System.Diagnostics.Process.Start(Copen + "cfp.exe");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...