Прокачай свой UAC и несколько вопросов по этому поводу

У меня есть это приложение, которое должно делать некоторые вещи в защищенных путях (например,% PROGRAMFILES%), я знаю, что я должен использовать% APPDATA%, но пока не могу это изменить. Я выделил все вещи, которые могут потребовать UAC для отображения в другом проекте, вот пример кода:

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

Итак, я вызываю этот исполняемый файл из моей основной программы, и если он не работает из-за неавторизованного доступа, он запускается сам, показывая запрос UAC.

Мои вопросы:

1) Мне пришлось преобразовать выходные данные проекта из DLL в EXE, потому что я не мог найти способ запросить повышение уровня UAC из DLL, есть ли простой способ сделать это?

2) Я также заметил, что некоторые программы показывают персонализированное сообщение UAC с логотипом программы и всеми этими вещами, позвольте мне показать вам пример:

Как я могу сделать это для моей программы?

3) Чтобы избежать входа в цикл, когда он работает с повышенными привилегиями, он получает еще одно исключение UnauthorizedAccessException, которое я сделал, передавая любые аргументы. Что бы вы сделали, чтобы достичь той же цели?

Я думаю, что пока все. Спасибо за ваше время.

Ответы на вопрос(2)

Ваш ответ на вопрос