在C#中将Exe文件作为嵌入式资源运行

时间:2013-03-18 05:05:23

标签: c# resources embed exe

我有第三方EXE。我只需要从我的C#应用​​程序运行它。

我的主要目标是从我的C#文件中获得第三方可执行文件的版权。

有没有更好的方法来做到这一点。

我该怎么做?

谢谢你 梅纳卡

3 个答案:

答案 0 :(得分:19)

  1. 首先将嵌入的可执行文件作为资源文件添加到现有资源文件中,如果没有,则需要[将现有项添加到项目中,并选择资源文件]
  2. 在资源编辑器页面中添加可执行文件时,选择type为[Files],然后找到嵌入的可删除文件并添加它。例如,名为“subexe.exe”的文件,则资源设计cs文件将添加以下代码:
    internal static byte[] SubExe {
            get {
                object obj = ResourceManager.GetObject("SubExe", resourceCulture);
                return ((byte[])(obj));
            }
        }
    
  3. 添加一个访问资源的方法,这也很简单,只需将以下代码添加到资源设计器cs文件中

    
    public static byte[] GetSubExe()
        {
            return SubExe;
        }
    

  4. 在主要的可执行文件源代码中,添加以下内容以读取资源并将其写入新文件

    
    string tempExeName = Path.Combine(Directory.GetCurrentDirectory(), "A3E5.exe");

        using(FileStream fsDst = new FileStream(tempExeName,FileMode.CreateNew,FileAccess.Write))
        {
            byte[] bytes = Resource1.GetSubExe();
    
            fsDst.Write(bytes, 0, bytes.Length);
        }    
    

  5. 使用进程运行新的可执行文件

答案 1 :(得分:2)

右键单击你的项目解决方案资源管理器,然后在对话框中添加现有项目选择可执行文件,然后转到你的exe路径并在你的项目中添加你的exe ..那么如果你想在按钮点击事件上启动你的exe然后写这个代码很简单...

private void button_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process.Start("fire.EXE");
        }

答案 2 :(得分:1)

可以写一个更简单的

private void ExtractResource(string resName, string fName)
 {
      object ob = Properties.Resources.ResourceManager.GetObject(resName, originalCulture);
      byte[] myResBytes = (byte[])ob;
      using (FileStream fsDst = new FileStream(fName, FileMode.CreateNew, FileAccess.Write))
      {
         byte[] bytes = myResBytes;
         fsDst.Write(bytes, 0, bytes.Length);
         fsDst.Close();
         fsDst.Dispose();
      }
}