2015-01-05 317 views
1

我寫了一個WinForms C#應用程序,需要管理員權限才能工作,並且還需要在計算機啓動時(使用註冊表)啓動。保持管理員權限

RegistryKey reg = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); 
reg.SetValue("My app", Application.ExecutablePath.ToString()); 

所以,我試圖改變清單到requiredAdministrator並得到了一個錯誤有關ClickOnce,我完全聽不懂。所以我嘗試發佈應用程序並以管理員身份進行安裝,但是當應用程序在啓動時啓動時,它不再具有管理員權限。

任何人都知道如何獲得管理員權限?

+1

這聽起來像你的程序將是一個巨大的焦點,如果攻擊它已經成爲流行,因爲你保證在每個登錄用戶的桌面上都有以Admin權限運行的代碼。你不能將你的程序拆分成一個*服務*,它被設置爲運行時需要足夠的權限來執行它的工作,然後爲每個用戶運行一個非管理程序,並與服務進行通信以獲取(整體)作業做了什麼? –

+1

如果您的應用程序需要在啓動時運行,那麼您是否考慮創建一個[windows服務](http://msdn.microsoft.com/en-us/library/zt39148a%28v=vs.110%29.aspx)? – Justin

回答

0

你可以嘗試使用自動升降,不知道如何它將外觀爲自動啓動應用程序(同@peer答案)

// at application start 
var identity = WindowsIdentity.GetCurrent(); 
var principal = new WindowsPrincipal(identity); 
bool isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator); 

// if not admin - elevate 
if(!isAdmin) 
{ 
    var info = new ProcessStartInfo(Application.ExecutablePath) { Verb = "runas" }; 
    Process.Start(info); 
    return; // exit 
} 

// if we are here - application runs as admin 
... 
1

您可以轉至快捷方式=>屬性=>高級... =>選中以管理員身份運行。

現在您已經配置了快捷方式以啓動具有管理員權限的應用程序。

0

你需要的是權限提升請求。通常它通過清單來完成,或者如果你只有一個進程,你可以用提升的權限來啓動它。 This給出了一個解釋,並解釋瞭如何embed清單。