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

本文关键字:管理员 权限 应用程序 | 更新日期: 2023-09-27 18:31:33

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

我查看了其他网站,但找不到任何有用的东西。

我尝试编辑清单等内容,并插入了该行:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

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

你可以帮我吗?

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

首先 -

事实上,设计不允许以管理员身份安装和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
    }                
}

这种方法对我来说非常有效。这里的关键是:

pi.UseShellExecute = true;
pi.Verb = "runas";

它以管理员权限运行您的 EXE——因此届时将显示 UAC 提示。这里的另一个好处是,用户可能不会在每次使用应用程序时都运行此特定逻辑 - 因此当他们不需要提示时,他们不会对提示感到恼火。

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

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