У меня есть это приложение, которое должно выполнять некоторые действия в защищенных путях (например,% 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, с логотипом программы и всеми этими вещами, позвольте мне показать вам пример:
![Ugly UAC](https://imgur.com/mJXaj.png)
![Personalized UAC](https://imgur.com/ujuyd.png)
Как я могу сделать это для моей программы?
3) Чтобы не входить в цикл при работе с повышенными привилегиями, он получает еще одно исключение UnauthorizedAccessException, которое я сделал, передавая любые аргументы. Что бы вы сделали для достижения той же цели?
Я думаю, это пока все. Спасибо за ваше время.