Pimp mój UAC i kilka pytań na ten temat

Mam tę aplikację, która musi robić pewne rzeczy na chronionych ścieżkach (jak% PROGRAMFILES%), wiem, że powinienem używać% APPDATA%, ale nie mogę tego zmienić na razie. Wyodrębniłem wszystkie rzeczy, które mogą wymagać, aby UAC pojawił się w innym projekcie. Oto przykładowy kod:

using System;
using System.Diagnostics;
using System.IO;
using System.Windows.Forms;

class Class1
{
    static void Main(string[] args)
    {
        try
        {
            File.CreateText(Path.Combine(Application.StartupPath, "something.txt"));
        }
        catch (UnauthorizedAccessException ex)
        {
            MessageBox.Show(ex.Message, "UnauthorizedAccessException", MessageBoxButtons.OK, MessageBoxIcon.Error);

            if (args.Length == 0)
            {
                Process proc = new Process();
                proc.StartInfo.FileName = Application.ExecutablePath;
                proc.StartInfo.Arguments = "not again";
                proc.StartInfo.Verb = "runas";
                proc.Start();
            }
            else
            {
                MessageBox.Show("Exit to avoid loop.");
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
}

Tak więc nazywam ten plik wykonywalny z mojego głównego programu, a jeśli nie powiedzie się z powodu nieautoryzowanego dostępu, uruchomi się, wyświetlając żądanie UAC.

Moje pytania to:

1) Musiałem przekonwertować dane wyjściowe projektu z biblioteki DLL do pliku EXE, ponieważ nie mogłem znaleźć sposobu na podniesienie poziomu UAC z biblioteki DLL. Czy jest jakiś prosty sposób, aby to zrobić?

2) Zauważyłem również, że niektóre programy pokazują spersonalizowaną wiadomość UAC, z logo programu i wszystkimi tymi rzeczami, pozwól, że pokażę ci przykład:

Jak mogę to zrobić dla mojego programu?

3) Aby uniknąć wpisywania się w pętlę, gdy działa z podwyższonymi uprawnieniami, dostaje inny UnauthorizedAccessException Zrobiłem to przekazując dowolne argumenty. Co byś zrobił, aby osiągnąć ten sam cel?

Myślę, że to wszystko na teraz. Dziękuję za Twój czas.

questionAnswers(2)

yourAnswerToTheQuestion