2017-09-23 44 views
0

J'essaie d'obtenir le résultat, oui ou non, que les utilisateurs appuient sur pour répondre à un programme lorsqu'ils sont exécutés en tant qu'admin.Comment obtenir résultat après exécution .bat en tant qu'admin - C#

Exemple: IMAGE

J'essaie avec le code suivant:

var processInstall = new ProcessStartInfo(); 
      processInstall.CreateNoWindow = true; 
      processInstall.FileName = "myBatchFileAddress"; 
      processInstall.Verb = "runas"; 
      var process = new Process(); 
      process.StartInfo = processInstall; 
      process.Start(); 
      process.WaitForExit(); 
      //Here I must deal with the result of user, if is yes or no 
+0

Cette image est l'UAC de Windows, vous n'obtiendrez pas la réponse de cela. Vous pouvez même le désactiver pour qu'il ne soit jamais affiché. Si 'oui' le processus va s'exécuter, sinon il ne sera pas –

Répondre

0

fichiers batch sont une technologie très ancienne. Littéralement aussi ancien que DOS. Donc par leur nature, la capacité de communiquer est limitée.

Les programmes de l'époque DOS sont principalement communiqués via "ERRORLEVEL". Le retour dans le programme Console affecte toujours le niveau d'erreur. 0 a été retourné pour "pas de problème". Tout le reste pour un problème. Batchfiles pourrait le vérifier. Et je suis 90% certaines fenêtres l'utilise encore réellement - si une configuration retourne n'importe quoi mais 0, il demande "devrais-je essayer encore avec des arrangements de compatibilité?" En utilisant EXIT vous pouvez définir quel ERRORLEVEL le fichier batch "renvoie".

Cependant, il existe une autre façon, en fonction de la façon dont les programmes sont verbeux: IO redirection. Gardez à l'esprit que les fichiers batch sont interprétés.

Vous devez donc exécuter le programme console, puis donner l'ordre d'exécuter la console (généralement en tant que paramètre avec chemin d'accès complet, voir la documentation de la console pour plus de détails). Enfin, l'exécution d'un fichier batch en tant qu'administrateur a tendance à vider complètement les chemins. Le fichier batch doit être designed to compensate.

Bien sûr, si ces programmes sont écrits par vous-même, vous disposez d'options telles que la communication interprocessus. Mais je suppose que ce n'était pas le cas en ce moment.

Edit: Il semble que j'ai mal compris la question. Si un programme demande des privilèges Adminsitrative en raison d'un manifeste ou est exécuté avec des runes mais que l'élévation est refusée, l'exécution n'est jamais effectuée. Le programme n'est même pas démarré par Windows. Il est propablement pas même chargé en mémoire.

+0

"Edit: Il semble que j'ai mal compris la question.Si un programme demande des privilèges d'administration dus à un manifeste ou est exécuté avec des runes mais l'élévation est refusée, l'exécution est Le programme n'est même pas lancé par Windows, il n'est même pas chargé en mémoire. " Et, comment puis-je savoir quelle option l'utilisateur a sélectionnée? – Adolfok3

+0

S'il vous plaît supprimer tout de votre réponse qui n'est pas pertinente à cette question –