2017-08-22 2 views
1

J'ai référencé d'autres sujets et il vient le codage suivant, mais cela ne fonctionne pas. Je lui permets de créer une fenêtre de commande et d'utiliser l'argument "/ k" en gardant la fenêtre ouverte pour que je puisse retrouver sa sortie.Comment faire pour exécuter la ligne de commande avec admin droite dans C#

Cependant, je peux voir l'avertissement de la fenêtre que la commande a besoin des droits d'administrateur à exécuter. Comment puis-je l'exécuter en droits d'administrateur?

public void ClearArpCache() { 
     ProcessStartInfo processStartInfo = new ProcessStartInfo("cmd.exe", "/user:Administrator \" cmd /k arp -d \""); // same as "netsh interface ip delete arpcache" 
     processStartInfo.RedirectStandardOutput = true; 
     //processStartInfo.CreateNoWindow = true; 
     //processStartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
     processStartInfo.UseShellExecute = false; 
     processStartInfo.StandardOutputEncoding = Encoding.Default; 
     processStartInfo.Verb = "runas"; 

     Process.Start (processStartInfo); 
     UnityEngine.Debug.Log ("ARP table cache cleared."); 
    } 

ÉDITÉE:

Essayez de changer de "cmd.exe" à "RunAs.exe"

public void ClearArpCache() { 
     ProcessStartInfo processStartInfo = new ProcessStartInfo("runas.exe", "/user:Administrator \" cmd /k arp -d \""); // same as "netsh interface ip delete arpcache" 
     processStartInfo.RedirectStandardOutput = true; 
     //processStartInfo.CreateNoWindow = true; 
     //processStartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
     processStartInfo.UseShellExecute = false; 
     processStartInfo.StandardOutputEncoding = Encoding.Default; 

     Process.Start (processStartInfo); 
     UnityEngine.Debug.Log ("ARP table cache cleared."); 
    } 
+1

i * que * vous devez résoudre ce préalable en vous assurant que votre application a élevé UAC, voir https://stackoverflow.com/questions/6412896/giving-application-elevated-uac –

+0

/utilisateur: administrateur est pas un ensemble de paramètres listés pour cmd .. vous sûr que vous ne vouliez pas dire runas? – BugFinder

+0

Merci @BugFinder, j'ai ajouté "runas" dans StartInfo, mais ça n'aide pas. –

Répondre

0

Juste clarifié pourquoi il a échoué en utilisant "runas". Afin d'utiliser "runas" dans Verb, UseShellExecute doit d'abord être tourné vrai. Lors de l'exécution de la fonction suivante, une fenêtre demandant les droits d'administrateur apparaîtra, cliquez simplement sur 'Oui' pour commencer l'exécution. Bien que ce soit hors de portée, si possible, je veux aussi sauter la fenêtre pop-up.

public void ClearArpCache() { 
     ProcessStartInfo processStartInfo = new ProcessStartInfo("cmd.exe", "/k arp -d"); // same as "netsh interface ip delete arpcache" 
     processStartInfo.CreateNoWindow = true; 
     processStartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
     processStartInfo.UseShellExecute = true; 
     processStartInfo.Verb = "runas"; 

     Process.Start (processStartInfo); 
     UnityEngine.Debug.Log ("ARP table cache cleared."); 
    } 
+0

Si vous n'aimez pas le popup UAC, vous devez le [désactiver] (https://www.howtogeek.com/howto/windows-vista/disable-user-account-control-uac-the-easy -way-on-windows-vista /). – Oliver