我需要授予我的应用程序管理员权限,知道它将从用户会话而不是管理员帐户运行。
我在其他网站上看过,但找不到任何有用的东西。
我尝试编辑清单以及其他内容,并插入了以下行:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
这在尝试使用 ClickOnce 发布时给了我一个错误,但在我调试时却没有。
你能帮助我吗?
我需要授予我的应用程序管理员权限,知道它将从用户会话而不是管理员帐户运行。
我在其他网站上看过,但找不到任何有用的东西。
我尝试编辑清单以及其他内容,并插入了以下行:
<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 提示。这里的另一个很好的结果是,用户可能不会在每次使用应用程序时都运行这个特定的逻辑——因此当他们不需要它时,他们不会被提示惹恼。
I'm pretty sure that this behaviour is by design.
ClickOnce apps are designed to be installable without Administrator privileges. It's not possible to elevate them at runtime as this means that effectively a user with no admin rights could install then run the app as admin; this would be a security risk.