Предоставление приложению повышенного уровня UAC

У меня есть приложение, которому требуется повышение уровня UAC.

У меня есть код, который позволяет мне это сделать, но приложение открывается дважды ... проблема ..

так вот код в форме 1:

 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;
            }

        }

    }

, а это код program.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 после его открытия ..

спасибо

11
задан user175084 20 June 2011 в 14:35
поделиться