c# - 为应用程序提供提升的 UAC

标签 c# asp.net winforms uac

我有一个需要 UAC 提升的应用程序。

我有允许我提供的代码,但应用程序打开了两次,这是一个问题。

这是 Form1 的代码:

public Form1()
{
    InitializeComponent();

    WindowsPrincipal pricipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
    bool hasAdministrativeRight = pricipal.IsInRole(WindowsBuiltInRole.Administrator);           

    if (!hasAdministrativeRight)
    {
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.UseShellExecute = true;
        startInfo.WorkingDirectory = Environment.CurrentDirectory;
        startInfo.FileName = Application.ExecutablePath;
        startInfo.Verb = "runas";
        
        try
        {
            Process p = Process.Start(startInfo);
        }
        catch (System.ComponentModel.Win32Exception ex)
        {
            return;
        }
    }
}

这是programs.cs的代码:

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());
}

通过调试发现是先执行

Process p = Process.Start(startInfo);

打开应用程序 UAC 提升对话框,然后打开应用程序

然后它转到

Application.Run(new Form1());

在 main() 中并再次打开应用程序。

我不希望它再次打开应用。

我是新手,所以我想问一下我做错了什么吗?打开 UAC 后我是否需要关闭它?

最佳答案

您无需干预所有这些以确保您的应用程序始终以提升的权限运行。你可以简单地 add an application manifest它指示 Windows 以提升的方式运行您的应用程序,并且 UAC 提示将出现,您无需编写一行代码。

有一个相关问题的答案也描述了如何在此处添加 list :How can I embed an application manifest into an application using VS2008?

关于c# - 为应用程序提供提升的 UAC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6412896/

相关文章:

c# - 我如何对这个(正确地)抛出异常的异步方法进行单元测试?

c# - ASP.NET MVC 为什么需要调用父类的空虚方法

c# - 捕获 WebAPI 方法调用的响应大小(以字节为单位)

javascript - 如何使用 Ajax 将 JavaScript 数组传递给 C# 函数

c# - 将 html 表格拖放到另一个应用程序中

c# - 仅使用以另一个组合框中所选项目第一个字符开头的结果填充组合框

c# - 如何在 Windows 窗体中运行我的控制台应用程序代码?

c# - Visual Studio 2010 认为它处于 Debug模式(但它设置为 Release模式)

c# - JavaScript 从字符串中减去元素

asp.net - 带有 Facebook 访问 token 的 MVC 5 Web API 到 RegisterExternal,无需 Cookie