Non credo che sia possibile elevare il processo attualmente in esecuzione. È integrato in Windows Vista che i privilegi di amministratore vengono assegnati a un processo all'avvio, a quanto ho capito. Se guardi vari programmi che utilizzano l'UAC, dovresti vedere che in realtà avviano un processo separato ogni volta che deve essere eseguita un'azione amministrativa (Task Manager è uno, Paint.NET è un altro, quest'ultimo è infatti un'applicazione .NET ).
La soluzione tipica a questo problema è specificare gli argomenti della riga di comando quando si avvia un processo con privilegi elevati (il suggerimento di abatishchev è un modo per farlo), in modo che il processo avviato sappia solo di visualizzare una certa finestra di dialogo e quindi uscire dopo che questa azione è stata eseguita completato. Quindi non dovrebbe quasi essere notato all'utente che un nuovo processo è stato avviato e poi chiuso, e sembrerebbe piuttosto come se fosse stata aperta una nuova finestra di dialogo all'interno della stessa app (specialmente se hai qualche hacker per rendere la finestra principale del processo elevato un figlio del processo genitore). Se non hai bisogno dell'interfaccia utente per l'accesso elevato, ancora meglio.
Per una discussione completa sull'UAC su Vista, ti consiglio di leggere questo articolo molto approfondito sull'argomento (gli esempi di codice sono in C ++, ma sospetto che dovrai usare WinAPI e P / Invoke per fare la maggior parte delle cose in C # Comunque). Spero che ora tu veda almeno l'approccio giusto da adottare, anche se la progettazione di un programma conforme all'UAC è tutt'altro che banale ...