我有一个应用程序需要在具有提升权限的Windows 8上自动运行。 我已经嵌入了包含requestedExecutionLevel的requireAdministrator属性的清单,这在从鼠标单击运行时工作正常,但我需要应用程序自动运行。
这在vista和Windows 7上工作正常但在Windows 8上没有...它只是不运行。如何让它执行并提示用户许可?
干杯
答案 0 :(得分:4)
我没有任何Windows 8安装可用于测试此功能,但在Click Once部署中要求管理员权限时我遇到了类似的问题(不允许您使用清单)。
解决方法是让应用程序在启动时检查它是否以管理员身份运行,如果它没有以管理员身份运行,则以管理员身份重新启动。
以下是我使用的代码(稍加修改):
public static bool IsRunningAsAdministrator()
{
var wi = WindowsIdentity.GetCurrent();
var wp = new WindowsPrincipal(wi);
return wp.IsInRole(WindowsBuiltInRole.Administrator);
}
public static void StartAsAdmin(StartupEventArgs e)
{
if (IsRunningAsAdministrator())
return;
// It is not possible to launch a ClickOnce app as administrator directly, so instead we launch the app as administrator in a new process.
var processInfo = new ProcessStartInfo(Assembly.GetEntryAssembly().CodeBase);
// The following properties run the new process as administrator
processInfo.UseShellExecute = true;
processInfo.Verb = "runas";
// Start the new process
Process.Start(processInfo);
// Shut down the current process
Application.Current.Shutdown();
}
在很多机器上测试后更新:我遇到的一个问题是,这个解决方案的反病毒软件经常将此视为可疑行为并阻止启动。
我最终将安装程序+自动更新从点击一次更改为WiX Toolset + NAppUpdate并改为使用requestedExecutionLevel="requireAdministrator"
运行。
答案 1 :(得分:3)
我需要应用程序自动运行。
我不确定“自动运行”是什么意思,但我认为您希望应用程序在用户登录时,在某个时间或某个其他触发条件满足时运行。您可以使用任务计划程序来实现此目的。如果用户具有管理权限,您可以请求任务计划程序以“具有最高”权限运行应用程序。为此,您必须在任务的属性中选中“以最高权限运行”:
请注意,当任务计划程序执行该任务时,即使它以管理权限执行,也不会向用户显示任何UAC提示。