Ho questa applicazione che deve fare alcune cose in percorsi protetti (come% PROGRAMFILES%), so che dovrei usare% APPDATA%, ma non posso cambiarlo per adesso. Ho isolato tutte le cose che potrebbero richiedere UAC di presentarsi su un altro progetto, ecco un esempio di codice:Pimp mio UAC e alcune domande a riguardo
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);
}
}
}
Quindi, io chiamo questo eseguibile dal mio programma principale, e se non riesce a causa di un accesso non autorizzato, si avvierà da solo mostrando la richiesta UAC.
Le mie domande sono:
1) ho dovuto convertire l'uscita del progetto da una DLL a un EXE, perché non riuscivo a trovare un modo per richiedere UAC elevazione da una DLL, non v'è alcun modo semplice per farlo quella?
2) Ho anche notato che alcuni programmi visualizzano un messaggio UAC personalizzato, con il logo del programma e tutte quelle cose, mi permetta di mostrare un esempio:
Come può Lo faccio per il mio programma?
3) Per evitare di entrare in un ciclo quando è in esecuzione con privilegi elevati e ottiene un altro UnauthorizedAccessException ho fatto quella cosa passando tutti gli argomenti. Cosa faresti per raggiungere lo stesso obiettivo?
Penso che sia tutto per ora. Grazie per il tuo tempo.
Per quanto riguarda i colori, quelli dipendono dal programma. Vedi http://news.softpedia.com/images/news2/Windows-Vista-UAC-Colors-3.png per un breve riepilogo. – sisve