一旦我的程序安装在客户端机器上,我如何强制我的程序在Windows 7上以管理员身份运行?


当前回答

我实现了一些代码来手动完成:

using System.Security.Principal;
public bool IsUserAdministrator()
{
    bool isAdmin;
    try
    {
        WindowsIdentity user = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal(user);
        isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);
    }
    catch (UnauthorizedAccessException ex)
    {
        isAdmin = false;
    }
    catch (Exception ex)
    {
        isAdmin = false;
    }
    return isAdmin;
}

其他回答

我实现了一些代码来手动完成:

using System.Security.Principal;
public bool IsUserAdministrator()
{
    bool isAdmin;
    try
    {
        WindowsIdentity user = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal(user);
        isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);
    }
    catch (UnauthorizedAccessException ex)
    {
        isAdmin = false;
    }
    catch (Exception ex)
    {
        isAdmin = false;
    }
    return isAdmin;
}

添加一个requestedExecutionLevel元素到你的清单中只是战斗的一半;你必须记住UAC是可以关闭的。如果是,你必须执行老式的检查方法,如果用户不是管理员(在你的线程的CurrentPrincipal上调用IsInRole(WindowsBuiltInRole.Administrator)),就弹出一个错误对话框。

您可以使用ClickOnce Security Settings创建清单,然后禁用它:

Right click on the Project -> Properties -> Security -> Enable ClickOnce Security Settings

单击后,将在项目的属性文件夹下创建一个名为app.manifest的文件,一旦创建,您可以取消选中启用ClickOnce安全设置选项

打开该文件并更改这一行:

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

to:

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

这将使程序需要管理员权限。

在Visual Studio 2008上工作时,右键单击项目->添加新项,然后选择应用程序清单文件。

在清单文件中,你会发现标签requestedExecutionLevel,你可以将级别设置为三个值:

<requestExecutionLevel level=“asInvoker” uiAccess=“false” />

OR

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

OR

<requestExecutionLevel level=“highestAvailable” uiAccess=“false” />

要将应用程序设置为以管理员身份运行,必须选择中间的一个。

具体步骤如下。

将应用程序清单文件添加到项目 更改应用程序设置为"app.manifest" 更新标签“requestedExecutionLevel”为requireAdministrator。

注意,使用这段代码你需要关闭ClickOnce的安全设置,为此,进入Properties -> security -> ClickOnce security