Lancer une application (.EXE) à partir de C #?

164

Comment puis-je lancer une application en utilisant C #?

Exigences: Doit fonctionner sur Windows XP et Windows Vista .

J'ai vu un échantillon de l'échantillonneur de DinnerNow.net qui ne fonctionne que sous Windows Vista.

Rudigrobler
la source

Réponses:

168

Utilisez la System.Diagnostics.Process.Start()méthode.

Consultez cet article pour savoir comment l'utiliser.

Process.Start("notepad", "readme.txt");

string winpath = Environment.GetEnvironmentVariable("windir");
string path = System.IO.Path.GetDirectoryName(
              System.Windows.Forms.Application.ExecutablePath);

Process.Start(winpath + @"\Microsoft.NET\Framework\v1.0.3705\Installutil.exe",
path + "\\MyService.exe");
Igal Tabachnik
la source
230

Voici un extrait de code utile:

using System.Diagnostics;

// Prepare the process to run
ProcessStartInfo start = new ProcessStartInfo();
// Enter in the command line arguments, everything you would enter after the executable name itself
start.Arguments = arguments; 
// Enter the executable to run, including the complete path
start.FileName = ExeName;
// Do you want to show a console window?
start.WindowStyle = ProcessWindowStyle.Hidden;
start.CreateNoWindow = true;
int exitCode;


// Run the external process & wait for it to finish
using (Process proc = Process.Start(start))
{
     proc.WaitForExit();

     // Retrieve the app's exit code
     exitCode = proc.ExitCode;
}

Il y a beaucoup plus que vous pouvez faire avec ces objets, vous devriez lire la documentation: ProcessStartInfo , Process .

sfuqua
la source
7
Je voulais juste souligner que cela semble également fonctionner avec d'autres types de fichiers que .exes. Pointez simplement sur le fichier que vous souhaitez ouvrir et Windows fera de son mieux pour l'ouvrir: System.Diagnostics.Process.Start (@ "C: \ Users \ Blank \ Desktop \ PdfFile.pdf");
DLeh
WindowStyle = ProcessWindowStyle.Hidden est pour non-GUI. La première fois que j'ai exécuté cela, cela a échoué sans UseShellExecute = false, mais cela fonctionne maintenant. Je ne sais pas ce qui se passe là-bas ...
Barton
Que faire si je ne connais pas le nom complet de l'exe, je veux appeler "PathTo * .exe" Est-ce possible? Puis-je utiliser "*" pour le reste du nom?
vishal
@vishal, ce processus consiste à appeler un exécutable spécifique. Vous pouvez certainement essayer d'utiliser PathTo*.exemais je ne m'attendrais pas à ce que cela fonctionne. (a) et s'il y a plusieurs correspondances? (b) J'espère que le code de Microsoft ne le permettrait pas, car ce serait une sécurité faible.
sfuqua
58
System.Diagnostics.Process.Start("PathToExe.exe");
Mark S. Rasmussen
la source
Que faire si je ne connais pas le nom complet de l'exe, je veux appeler "PathTo * .exe" Est-ce possible?
vishal
@vishal vous devez coder une procédure de recherche pour trouver l'exécutable
KADEM Mohammed
19
System.Diagnostics.Process.Start( @"C:\Windows\System32\Notepad.exe" );
Adam Kane
la source
14

Si vous rencontrez des problèmes lors de l'utilisation de System.Diagnostics comme je l'ai fait, utilisez le code simple suivant qui fonctionnera sans lui:

Process notePad = new Process();
notePad.StartInfo.FileName   = "notepad.exe";
notePad.StartInfo.Arguments = "mytextfile.txt";
notePad.Start();
NDB
la source
10
Comment est-ce "sans System.Diagonostics"? Processest dans System.Diagnostics.
Paul Sinclair
2

Placez simplement votre file.exe dans le dossier \ bin \ Debug et utilisez:

Process.Start("File.exe");
Amin Mohamed
la source
3
Comment votre réponse s'améliore-t-elle par rapport à toutes les précédentes?
mustaccio
La plupart des gens qui viennent voir ce message se sont trompés sur le chemin d'un fichier qu'ils placent généralement dans le dossier de débogage, alors lorsqu'ils utilisent mon indice "File.exe", ils ne comprennent pas directement le chemin d'accès dans ce cas.
Amin Mohamed le
0

Utilisez Process.Start pour démarrer un processus.

using System.Diagnostics;
class Program
{
    static void Main()
    {
    //
    // your code
    //
    Process.Start("C:\\process.exe");
    }
} 
Impasse
la source
0

Essaye ça:

Process.Start("Location Of File.exe");

(Assurez-vous d'utiliser la bibliothèque System.Diagnostics)

user6436606
la source