À partir d'une application qui n'est pas exécutée en tant qu'administrateur, j'ai le code suivant:
ProcessStartInfo proc = new ProcessStartInfo();
proc.WindowStyle = ProcessWindowStyle.Normal;
proc.FileName = myExePath;
proc.CreateNoWindow = false;
proc.UseShellExecute = false;
proc.Verb = "runas";
Lorsque j'appelle Process.Start (proc), je ne reçois pas de fenêtre contextuelle demandant la permission de s'exécuter en tant qu'administrateur et l'exe n'est pas exécuté en tant qu'administrateur.
J'ai essayé d'ajouter un app.manifest à l'exécutable trouvé sur myExePath, et j'ai mis à jour le requiredExecutionLevel en
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
Avec le app.manifest mis à jour, sur l'appel Process.Start (proc), j'obtiens une exception: "L'opération demandée nécessite une élévation.
Pourquoi l'action .Verb ne définit-elle pas les privilèges d'administrateur?
Je teste sur Windows Server 2008 R2 Standard.
Vous doit utilisez ShellExecute
. ShellExecute est la seule API qui sait lancer Consent.exe
pour élever.
En C #, la façon dont vous appelez ShellExecute
consiste à utiliser Process.Start
de même que UseShellExecute = true
:
private void button1_Click(object sender, EventArgs e)
{
ProcessStartInfo info = new ProcessStartInfo(@"C:\Windows\Notepad.exe");
info.UseShellExecute = true;
info.Verb = "runas";
Process.Start(info);
}
Si vous voulez être un bon développeur, vous pouvez attraper lorsque l'utilisateur a cliqué sur Non :
private void button1_Click(object sender, EventArgs e)
{
const int ERROR_CANCELLED = 1223; //The operation was canceled by the user.
ProcessStartInfo info = new ProcessStartInfo(@"C:\Windows\Notepad.exe");
info.UseShellExecute = true;
info.Verb = "runas";
try
{
Process.Start(info);
}
catch (Win32Exception ex)
{
if (ex.NativeErrorCode == ERROR_CANCELLED)
MessageBox.Show("Why you no select Yes?");
else
throw;
}
}
CreateProcess
ne peut pas faire d'élévation, crée uniquement un processus. ShellExecute
est celui qui sait comment lancer Consent.exe, et Consent.exe est celui qui vérifie les options de stratégie de groupe.Remarque : Tout code publié dans le domaine public. Aucune attribution requise.