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.