Visual C#中如何嵌入外部exe并调用?
比如要将外部程序exe嵌入C#程序中(编译时嵌入在C#的exe中),然后在button1_Click方法中调用?

解决方案 »

  1.   

                    //實例一個Process類,啟動一個獨立進程
                Process p = new Process();            //Process類有一個StartInfo屬性,這個是ProcessStartInfo類,包括了一些屬性和方法,下面我們用到了他的幾個屬性:
                p.StartInfo.FileName = exePath;           //設定程序名
                p.StartInfo.Arguments = command;    //設定程式執行參數
                p.StartInfo.UseShellExecute = false;        //關閉Shell的使用
                p.StartInfo.RedirectStandardInput = true;   //重定向標準輸入
                p.StartInfo.RedirectStandardOutput = true;  //重定向標準輸出
                p.StartInfo.RedirectStandardError = true;   //重定向錯誤輸出
                p.StartInfo.CreateNoWindow = false;          //設置不顯示窗口            p.Start();   //啟動            //p.StandardInput.WriteLine(command);       //也可以用這種方式輸入要執行的命令
                //p.StandardInput.WriteLine("exit");        //不過要記得加上Exit要不然下一行程式執行的時候會當機            return p.StandardOutput.ReadToEnd();       
      

  2.   

    我说的是嵌入外部程序exe,并在button1_Click方法中调用嵌入的exe,不是直接调外部exe。
      

  3.   

    你要使用它的一些方法的话只能调用dll吧
      

  4.   

    嵌入- -|||你可以把它加入到Resources.resx里,然后每次打开你的程序时,将其释放到临时目录,用完了可以删除
    调用方法同1楼
      

  5.   

    楼上说的“释放到临时目录”,“临时目录”是哪里?我在调用的时候p.StartInfo.FileName设置为什么(涉及到路径问题)?
      

  6.   


    系统临时文件目录 或者当前程序目录:
    Environment.GetEnvironmentVariable("Temp")
    或者
    Application.StartupPath
      

  7.   


    文件先保存在Properties.Resources里,然后在释放代码里Byte[]读取Properties.Resources的那个文件,再把Byte[]用File.Write/FileStream写到文件里
    具体的代码不记得了,晚上回去查查历史记录- -|||百度一下应该会有的
      

  8.   

    用在主程序里新建一个Appdomain
    让这个AppDomain调用那个exe 
    启动主程序后进程里是看不到那个exe的 
      

  9.   


    能讲一下具体做法吗?比如我要将a.exe嵌入,然后调用嵌入的a.exe(注意了,此时不是外部程序的a.exe了)?
      

  10.   


    你亲自尝试过吗?
    如果可以的话 p.StartInfo.FileName赋值成什么?
    我一再说了是作为嵌入资源的a.exe,不是外部程序a.exe。
    我尝试过,如果作为外部程序,那么p.StartInfo.FileName="a.exe";是正确的,但是作为内嵌资源的话p.StartInfo.FileName="a.exe";是不正确的,会报异常,找不到a.exe的文件。我希望直接调用内嵌的exe,而不希望跟前面9楼所说的释放到硬盘再当外部程序调用。
      

  11.   

    你的意思是要整和在一起吗?如果是这个意思的话,可以说不能,即使是.dll文件也只是调用的,
    你要知道,外部的exe的底层编码和你要编译的.net程序的底层代码根本是不通的,.net程序的底层是CL(通用语言),而且运行于CLR(通用语言运行时)之上的
      

  12.   


    private void button1_Click(object sender,EventArgs e)
    {
         Process.Start(@"notepad.exe");
        //Start静态方法用于启动一个外部的应用程序..参数是把一个可执行的exe文件目标路径..}
      

  13.   

    如果作为外部程序,那么p.StartInfo.FileName="a.exe";是正确的,但是作为内嵌资源的话p.StartInfo.FileName="a.exe";是不正确的,会报异常,找不到a.exe的文件。我希望直接调用内嵌的exe,而不希望跟前面9楼所说的释放到硬盘再当外部程序调用
      

  14.   

    AppDomain a = AppDomain.CreateDomain("A");
    a.ExecuteAssemblyByName("exe路径")
      

  15.   

    能讲一下具体做法吗?比如我要将a.exe嵌入,然后调用嵌入的a.exe(注意了,此时不是外部程序的a.exe了)? 
    这句具体听了还是有点糊涂
    我的代码是将a.exe的进程合并到你的调用的程序里 所以进程管理器里是看不到a.exe的
      

  16.   


    a.ExecuteAssemblyByName("exe路径") ?我的exe已经作为资源嵌入了,根本不是外部程序了,何来路径?