L' UseShellExecute
propriété booléenne est lié à l'utilisation de la windows ShellExecute fonction de vs le CreateProcess fonction de la réponse courte est que si UseShellExecute
qui est vrai, alors l' Process
classe va utiliser l' ShellExecute
de la fonction, sinon il utilisera CreateProcess
.
La plus longue réponse, c'est que l' ShellExecute
fonction est utilisée pour ouvrir un programme ou fichier - c'est à peu près equivalnt à la saisie de la commande à exécuter dans la boîte de dialogue exécuter et cliquez sur OK, ce qui signifie qu'il peut être utilisé pour (par exemple):
- Ouvert .les fichiers html ou web en utilisant le navigateur par défaut sans avoir besoin de savoir quel est le navigateur,
- Ouvrir un document word sans avoir besoin de savoir ce que le chemin d'installation de Word est
- Exécuter des fichiers batch
- Exécuter n'importe quelle commande sur le
PATH
Par exemple:
Process p = new Process();
p.StartInfo.UseShellExecute = true;
p.StartInfo.FileName = "www.google.co.uk";
p.Start();
Il est très facile pour l'utilisateur, polyvalent et puissant, cependant, est livré avec un certain nombre d'inconvénients:
- Il n'est pas possible de rediriger l'entrée / sortie standard d'erreur / poignées
- Il n'est pas possible de spécifier les descripteurs de sécurité (ou d'autres choses cool) pour le processus de l'enfant
-
Il est possible d'introduire des failles de sécurité si vous faites des hypothèses sur ce qui va réellement être exécuté:
// If there is an executable called "notepad.exe" somewhere on the path
// then this might not do what we expect
p.StartInfo.FileName = "notepad.exe";
p.Start();
CreateProcess
est une mesure plus précise de la façon de commencer un processus d' - il ne pas rechercher le chemin d'accès et vous permet de rediriger l'entrée standard ou la sortie de l'enfant du processus (entre autres choses). L'inconvénient de l' CreateProcess
, cependant, est qu'aucun des 4 exemples que j'ai donnés ci-dessus ne fonctionne (essayez et vous verrez).
En résumé, vous devez définir UseShellExecute
false (faux) si:
- Vous souhaitez rediriger l'entrée standard / sortie / erreur (ce qui est la raison la plus courante)
- Vous ne souhaitez pas rechercher le chemin d'accès de l'exécutable (par exemple, pour des raisons de sécurité)
Inversement, vous devriez conserver UseShellExecute
vrai si vous voulez ouvrir des documents, des urls ou des fichiers batch, etc... plutôt que d'avoir à donner expressément le chemin d'accès à un fichier exécutable.