Domanda

ho usato il file manifesto dell'applicazione, come descritto qui per avere una parte della mia applicazione in esecuzione con privilegi elevati (di cui ha bisogno).
Così, quando necessario, il programma principale solo invoca una piccola assembly utilizzando Process.Start che poi gestisce il compito per il quale sono necessari diritti di amministratore.

Tuttavia, come posso fare la stessa cosa su Windows XP?
Sembra XP ignora proprio questo manifesto e gestisce il piccolo assemblaggio nel contesto dell'utente corrente.

È stato utile?

Soluzione

Il seguente codice qui fa proprio quello che mi serve:

ProcessStartInfo processStartInfo = new ProcessStartInfo("path", "args");
processStartInfo.Verb = "runas";

using (Process process = new Process())
{
   process.StartInfo = processStartInfo;
   process.Start();
   process.WaitForExit();
}

Quindi, in realtà è necessario impostare "runas" a ProcessStartInfo.Verb. Con l'allegata manifesta questo codice ora funziona bene su Windows XP, Vista e 7.

Aggiornamento:
Vedi anche questa risposta a una domanda simile . Questo è fondamentalmente lo stesso codice, usando solo gli argomenti pure.

Altri suggerimenti

È possibile utilizzare la runas di comando.

Windows XP non ha UAC.

È necessario chiamare Process.Start con le credenziali di accesso di un utente con privilegi amministrativi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top