Pimp meine UAC und ein paar Fragen dazu

Ich habe diese Anwendung, die einige Dinge in geschützten Pfaden ausführen muss (wie% PROGRAMFILES%). Ich weiß, dass ich% APPDATA% verwenden sollte, aber ich kann das vorerst nicht ändern. Ich habe alle Dinge isoliert, für die die Benutzerkontensteuerung in einem anderen Projekt angezeigt werden muss. Hier ist ein Beispielcode:

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

Daher rufe ich diese ausführbare Datei von meinem Hauptprogramm aus auf. Wenn sie aufgrund eines nicht autorisierten Zugriffs fehlschlägt, wird sie automatisch gestartet und zeigt die UAC-Anforderung an.

Meine Fragen sind:

1) Ich musste die Projektausgabe von einer DLL in eine EXE-Datei konvertieren, da ich keine Möglichkeit gefunden habe, die UAC-Erhöhung von einer DLL anzufordern. Gibt es eine einfache Möglichkeit, dies zu tun?

2) Ich habe auch festgestellt, dass einige Programme eine personalisierte UAC-Nachricht mit dem Programmlogo und all diesen Dingen anzeigen. Lassen Sie mich Ihnen ein Beispiel zeigen:

Wie kann ich das für mein Programm tun?

3) Um zu vermeiden, in eine Schleife zu gelangen, wenn sie mit erhöhten Rechten ausgeführt wird und eine andere UnauthorizedAccessException erhält, habe ich das getan, indem ich irgendwelche Argumente übergeben habe. Was würden Sie tun, um das gleiche Ziel zu erreichen?

Ich denke das ist alles für jetzt. Vielen Dank für Ihre Zeit.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage