2010-08-25 13 views
4

我正在開發使用傳統USB驅動程序的應用程序。由於某些原因,傳統USB驅動程序的開發人員決定將信息寫入註冊表,並且此過程要求我擁有我的應用程序的管理權限。要求用戶使用VS調試器的管理權限重新啓動應用程序

現在,使用註冊表的USB功能應該只能由用戶完成一次,或者他想要重新校準他的設備,因此我不需要始終具有管理權限。

當您想要調試需要Visual Studio管理權限的應用程序時,您會彈出一個請求,以使用正確的憑據重新啓動應用程序。我怎麼能自己做到這一點?我想正常啓動我的應用程序,但是當用戶進入校準菜單時,我想向他展示一個類似的彈出窗口,告訴他爲了這個選項,他必須以管理權限重新啓動應用程序。

回答

3

通過使用ProcessStartInfo類型並將Verb屬性設置爲「runas」,您可以要求程序以管理員權限啓動。

var info = new ProcessStartInfo(); 
info.UseShellExecute = true; 
info.Verb = "runas"; 
// set the rest of the information 
Process.Start(info); 

這會提示用戶使用標準Windows對話框來運行管理員代碼。

+0

謝謝。結合這個與其他答案我可以做我想做的事。 – Jensen 2010-08-25 14:21:18

3

Visual Studio不以管理員身份重新啓動,它只是檢測它是否以管理員身份運行,如果不是,則會顯示一個消息框。最簡單的測試就是打電話給IsInRole--即使你在管理員組中,如果應用程序運行時沒有提升,它將返回false。例如:

 WindowsIdentity wi = WindowsIdentity.GetCurrent(); 
     WindowsPrincipal wp = new WindowsPrincipal(wi); 

     if (wp.IsInRole("Administrators")) 
     { 
      MessageBox.Show("Yes, you are an Administrator.", "Is Administrator?", MessageBoxButtons.OK, MessageBoxIcon.Information); 
     } 
     else 
     { 
      MessageBox.Show("No, you are not an Administrator.", "Is Administrator?", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
    } 

而不是這些消息框,你可以把你自己關於「請關閉並重新啓動我」。或者如果你想炫耀,給他們一個按鈕來點擊它將啓動一個提升的實例(使用ProcessStart和runas)並關閉這個實例。

+2

比字符串「管理員」更好地使用WindowsBuiltInRole.Administrator。 – 2011-05-30 19:02:27

+0

@熱線 - 你說得對,謝謝! – 2011-05-30 20:04:54

相關問題