2015-01-05 261 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清单。