一尘不染

提供应用程序提升的UAC

c#

我有一个需要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());
    }

在调试时,我发现它首先执行

进程p = Process.Start(startInfo);

这将打开应用程序UAC高程对话框,然后打开应用程序

但是接下来

Application.Run(新Form1());

在main()中,然后再次打开应用程序。

我不希望它再次打开应用程序…

我是新来的人,我在做错什么吗,一旦打开UAC,就需要关闭它。

谢谢


阅读 340

收藏
2020-05-19

共1个答案

一尘不染

您无需进行任何干预即可确保应用程序始终以提升的特权运行。您可以简单地添加一个应用程序清单,该清单指示Windows在提升状态下运行您的应用程序,并且无需编写任何代码即可显示UAC提示符。

有一个相关的问题,答案也描述了如何在此处添加清单:如何使用VS2008将应用程序清单嵌入到应用程序中?

2020-05-19