2009-05-01 2 views
0
try 
{ 
    RegistryKey rkApp = Registry.CurrentUser.OpenSubKey(
     "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); 

    if (rkApp.GetValue("AdobeBitmapViewer") == null) 
    { 
     rkApp.SetValue("AdobeBitmapViewer", Application.ExecutablePath.ToString()); 
    } 
    rkApp.Close(); 
} 
catch (Exception) { } 

Этот код работает в Windows XP, но в Windows Vista я получаю UnauthorizedException. Есть ли способ обойти UAC в Vista, чтобы установить раздел реестра?Как установить значение реестра в Windows Vista с помощью C#?

ответ

1

Я видел pages, говоря, что используйте CreateKey в отличие от OpenKey - это имеет значение?

Возможно, вам потребуется работать с повышенными полномочиями. Это может помочь example.

См. Здесь another пример права на селекцию.

+0

Высота требуется для Registry.CurrentUser. – Michael

+0

Я имею ввиду, не нужен для Registry.CurrentUser. – Michael

+0

ok проверьте исключение и посмотрите, чего не хватает. –

1

Это не должно быть проблемой UAC. Этот ключ находится в HKCU, который обычно не защищен UAC. UAC обычно удаляет ваш доступ к таким ключам, как HKLM.

Возможно, что программа на Vista появилась и создала этот ключ с привилегиями администратора и запретила вам писать ключ при нормальных обстоятельствах. Можете ли вы попробовать передать false (означает только чтение) и посмотреть, позволяет ли это открыть его? Если это так, вы должны посмотреть фактические разрешения на ключ и посмотреть, что они собой представляют.

+0

Я могу подтвердить, что код Тома работает на моей машине с Vista. – brianpeiris

+0

примечание: ключ AdobeBitmapViewer не существует на моей машине, поэтому ключ был создан при запуске кода. – brianpeiris