2010-07-13 111 views
3

所以,我发现了一个伟大的小EXE命令行应用程序(我们就叫它PROGRAM.EXE)输出一些数据,我想用C#来操作。包括在C#中的命令行应用程序执行EXE

我想知道是否有一种方法来“包装”的Program.exe到我的Visual Studio项目文件,这样我就可以交给我的编译的应用程序到同事,而不必向他们发送PROGRAM.EXE了。

任何帮助表示赞赏。

+1

它可能不是像刚才添加的Program.exe到你的资源一样简单。除非您确定它们已存在于目标系统上,否则还必须包含program.exe所具有的任何依赖项。另外,您是否有权将program.exe包含在您的应用程序中? – 2010-07-13 16:09:29

回答

-1

您可以通过rightclicking的项目,选择添加添加任何其他文件到您的项目新

+1

“这样我就可以手写我*编译*应用到同事” – Blorgbeard 2010-07-13 15:36:59

+0

...肯定,但我认为他们也想执行它太 – spender 2010-07-13 15:37:11

+0

,我想你的意思添加现有的。 – Blorgbeard 2010-07-13 15:37:20

4

有几种方法,你可以做到这一点。首先,您应该将program.exe添加到项目中。你会用鼠标右键单击在Visual Studio中的项目,并选择添加>现有项...选择的Program.exe做到这一点,它会出现在项目中。查看其属性,您可以将“复制到输出目录”设置为“始终复制”,并且它将显示在应用程序旁边的输出目录中。

另一种方式来解决这个问题是嵌入它作为一种资源。将program.exe添加到项目后,将项目的Build Action属性从Content更改为Embedded Resource。在运行时,您可以使用Assembly.GetManifestResourceStream提取命令行可执行文件并执行它。

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

病毒扫描真的* *一样,从哪儿冒出来的.exe文件,让他们存在的理由。只需部署.exe以及程序的其余部分。 – 2010-07-13 17:20:20

0

你可以尝试这样的:

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