强制应用程序具有管理员权限

Ato*_*xis 5 c# clickonce privileges administrator

我需要授予应用程序管理员权限,因为它知道它将从用户会话而不是管理员帐户运行.

我看过其他网站,但找不到任何有用的东西.

我尝试编辑清单和其他东西,并插入了行:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
Run Code Online (Sandbox Code Playgroud)

尝试使用ClickOnce发布时,这给了我一个错误,但在我调试时却没有.

你能帮助我吗?

avs*_*099 5

首先 - 确实,设计不允许以管理员身份安装ClickOnce应用程序:http://msdn.microsoft.com/en-us/library/142dbbz4(v = vs.90).aspx

看一下这篇文章:http://antscode.blogspot.ca/2011/02/running-clickonce-application-as.html - 它解释了如何以管理员身份运行ClickOnce应用程序.但是 - 不得不说我已走过这条道路 - 而且我没有太多运气.这种方法遇到了很多麻烦(尝试使用管理员权限运行ClickOnce应用程序).据我所知,最大的问题是自动更新无法正常工作.更不用说非管理员用户可能需要一直输入管理员凭据.

所以我的建议是重新考虑你的逻辑,并将你需要以管理员身份完成的部分封装在一个单独的EXE文件中 - 并且让用户非常清楚当他点击那个按钮时,UAC提示会出现(可能是添加"盾牌"图标到按钮).在那个button_click事件中做这样的事情:

// 2. Run Photoshop action on this image (and wait for the task to complete)
if (string.IsNullOrWhiteSpace(this.PhotoshopEnhanceActionAbsPath) == false)
{
    var pi = new ProcessStartInfo(this.PhotoshopEnhanceActionAbsPath,  "\"" + imgPhotoshopActionAbsPath + "\"");
    pi.UseShellExecute = true;
    pi.Verb = "runas";
    var photoshopAction = Process.Start(pi);
    var success = photoshopAction.WaitForExit();
    if (success == false)
    {
        // do something here
    }                
}
Run Code Online (Sandbox Code Playgroud)

这种方法对我来说非常有效.关键在于:

pi.UseShellExecute = true;
pi.Verb = "runas";
Run Code Online (Sandbox Code Playgroud)

它以管理员权限运行您的EXE - 因此此时将显示UAC提示.这里的另一个好结果是,用户每次使用应用程序时都可能无法运行这个特定的逻辑 - 因此当他们不需要时,他们不会被提示烦恼.


pau*_*aul 1

我很确定这种行为是设计使然的。

ClickOnce 应用程序设计为无需管理员权限即可安装。不可能在运行时提升它们,因为这意味着没有管理员权限的用户实际上可以安装应用程序,然后以管理员身份运行应用程序;这将是一个安全风险。