2011-05-12 54 views
0

我的任何計算機上都沒有XP。我努力讓一個小型應用程序在Vista和Windows 7中以管理員身份運行。然而我的測試者之一。報道稱,在Windows XP上,他是獲得以下異常:在Windows XP中授予應用程序權限以更改註冊表

System.UnauthorizedAccessException: Access to the registry key 'HKEY_CLASSES_ROOT\.ad2' is denied. 
    at Microsoft.Win32.RegistryKey.Win32Error(Int32 errorCode, String str) 

我使用的運行試圖寫入註冊表中的應用程序的代碼是:

var proc = new ProcessStartInfo { 
       UseShellExecute = true, 
       WorkingDirectory = Environment.CurrentDirectory, 
       FileName = Path.Combine(Application.StartupPath, "ADEFileAssociator.exe"), 
       Verb = "runas" 
      }; 

      try { 
       Process.Start(proc); 
      } 
      catch { 
       MessageBox.Show("Failed to start File Associator", "Process Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
       return; 
      } 

這對於打開UAC對話框的Vista和Win7來說工作正常。如果用戶接受運行,則註冊表將在這些版本上更新。我認爲這同樣適用於XP。顯然我錯了。所以我的問題是'我還需要做些什麼來讓我的應用程序在XP中寫入註冊表?

+0

用戶是管理員嗎?如果沒有,他可以做任何事情來製作該註冊表鍵。 – soandos 2011-05-12 16:32:40

回答

1

對於XP,您沒有UAC,因此您不能使用runas動詞。相反,您可以做的最好的設置是ProcessStartInfoUserNamePassword屬性。這非常糟糕,因爲您必須顯示驗證對話框或硬編碼值!

如果我在你的位置,我會很難找到一種避免獲得管理權限的方法嗎?如果失敗了,那麼我可能會將它作爲您的應用在XP上運行的前提條件,即用戶擁有管理員權限。

+0

謝謝。我希望我的用戶會放棄XP,但其中一些像帽子一樣掛着! – ScruffyDuck 2011-05-12 17:11:53

+0

@Scruffy對於我的生活,我不明白爲什麼你不使用像我已經告訴過你的每用戶文件關聯。更令我驚訝的是,您正在使用'runas'動詞而不是使用'requireAdministrator'清單。 – 2011-05-12 17:25:10

+0

因爲我還在學習和試驗。但是謝謝你提醒我關於每個用戶的文件關聯。此外,我還沒有使用清單之前,並會看看 - 這將解決XP用戶的問題? – ScruffyDuck 2011-05-13 05:30:39