2010-07-13 2 views
3

J'ai donc trouvé une petite application de ligne de commande EXE (nous l'appellerons programme.exe) qui génère des données que je voudrais manipuler avec C#. Je me demandais s'il y avait un moyen de "package" program.exe dans mon fichier de projet de studio visuel, de sorte que je puisse transmettre mon application compilée à un collègue sans avoir à leur envoyer aussi program.exe.Inclure et exécuter EXE dans l'application de ligne de commande C#

Toute aide est appréciée.

+1

Il ne peut pas être aussi simple que d'ajouter le program.exe à vos ressources. Vous devez également inclure toutes les dépendances que program.exe possède, sauf si vous êtes sûr qu'elles existent déjà sur le système cible. Aussi, avez-vous l'autorisation d'inclure le programme.exe dans votre application? –

Répondre

-1

Vous pouvez ajouter un fichier divers à votre projet en rightclicking sur le projet et la sélection ajouter un nouveau

+1

"afin que je puisse remettre mon application * compilé * à un collègue" – Blorgbeard

+0

... bien sûr, mais je pense qu'ils veulent l'exécuter aussi – spender

+0

Aussi, je pense que vous voulez dire ajouter existant. – Blorgbeard

4

Il y a plusieurs façons dont vous pouvez accomplir cette tâche. Tout d'abord, vous devez ajouter program.exe au projet. Vous le faites en cliquant avec le bouton droit sur le projet dans Visual Studio et en sélectionnant Ajouter> Élément existant ... Sélectionnez programme.exe et il apparaîtra dans le projet. En affichant ses propriétés, vous pouvez définir "Copier dans le répertoire de sortie" sur "Toujours copier" et il apparaîtra dans votre répertoire de sortie à côté de votre application.

Une autre façon d'aborder le problème consiste à l'incorporer en tant que ressource. Après avoir ajouté program.exe à votre projet, modifiez la propriété Action de construction de l'élément de contenu à la ressource incorporée. Lors de l'exécution, vous pouvez extraire l'exécutable de ligne de commande à l'aide de Assembly.GetManifestResourceStream et l'exécuter.

private static void ExtractApplication(string destinationPath) 
    { 
     // The resource name is defined in the properties of the embedded 
     string resourceName = "program.exe"; 
     Assembly executingAssembly = Assembly.GetExecutingAssembly(); 
     Stream resourceStream = executingAssembly.GetManifestResourceStream(resourceName); 
     FileStream outputStream = File.Create(destinationPath); 
     byte[] buffer = new byte[1024]; 
     int bytesRead = resourceStream.Read(buffer, 0, buffer.Length); 
     while (bytesRead > 0) 
     { 
      outputStream.Write(buffer, 0, bytesRead); 
      bytesRead = resourceStream.Read(buffer, 0, buffer.Length); 
     } 

     outputStream.Close(); 
     resourceStream.Close(); 
    } 
+1

Les scanners de virus * vraiment * comme les fichiers .exe qui apparaissent de nulle part, leur donne une raison d'être. Il suffit de déployer le fichier .exe avec le reste du programme. –

0

Vous pouvez essayer quelque chose comme:

try 
{ 
    System.Diagnostics.Process foobar = Process.Start("foobar.exe"); 
} 
catch (Exception error) 
{ 
// TODO: HANDLE error.Message 
} 
Questions connexes