如何在Windows 8中自动运行需要管理员权限的应用程序

时间:2012-09-17 15:20:21

标签: .net vb.net windows-8 autorun elevated-privileges

我有一个应用程序需要在具有提升权限的Windows 8上自动运行。 我已经嵌入了包含requestedExecutionLevel的requireAdministrator属性的清单,这在从鼠标单击运行时工作正常,但我需要应用程序自动运行。

这在vista和Windows 7上工作正常但在Windows 8上没有...它只是不运行。如何让它执行并提示用户许可?

干杯

2 个答案:

答案 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)

  

我需要应用程序自动运行。

我不确定“自动运行”是什么意思,但我认为您希望应用程序在用户登录时,在某个时间或某个其他触发条件满足时运行。您可以使用任务计划程序来实现此目的。如果用户具有管理权限,您可以请求任务计划程序以“具有最高”权限运行应用程序。为此,您必须在任务的属性中选中“以最高权限运行”:

Task properties

请注意,当任务计划程序执行该任务时,即使它以管理权限执行,也不会向用户显示任何UAC提示。