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

Posted

技术标签:

【中文标题】在 C# 中将 Exe 文件作为嵌入式资源运行【英文标题】:Run Exe file as an Embedded Resource in C# 【发布时间】:2013-03-06 09:24:27 【问题描述】:

我有一个第 3 方 EXE。我只需要从我的 C# 应用程序中运行它。

我的主要目标是为我的 C# 文件中的第 3 方可执行文件提供版权。

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

我该怎么做?

【问题讨论】:

您想在您的项目中运行不同的exe 吗? 是的.. 但其他人不应从外部访问该 exe 文件 Embedding an external executable inside a C# program and run it without creating new file的可能重复 im..confusued..你能一步一步告诉我 【参考方案1】:

可以写一个更简单的

私有无效提取资源(字符串 resName,字符串 fName) 对象 ob = Properties.Resources.ResourceManager.GetObject(resName, originalCulture); byte[] myResBytes = (byte[])ob; 使用 (FileStream fsDst = new FileStream(fName, FileMode.CreateNew, FileAccess.Write)) 字节 [] 字节 = myResBytes; fsDst.Write(bytes, 0, bytes.Length); fsDst.Close(); fsDst.Dispose();

【讨论】:

【参考方案2】:

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

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

【讨论】:

不是我的,但否决票可能是因为这没有回答 OP。不管 cmets 说 add your exe to your project,代码都会根据 PATH 运行选定的程序,可能无法获得您想要的程序。特别是因为没有提到将您刚刚添加到项目中的文件标记为Copy to Output。此外,OP 中的 cmets 表示保护文件不被直接执行,即使此代码已修复,也未解决。【参考方案3】:
    首先将嵌入的可执行文件作为资源文件添加到您现有的资源文件中,如果没有,则需要[将现有项添加到您的项目中,并选择资源文件] 在资源编辑器页面添加可执行文件时,选择类型为[Files],然后找到嵌入的可执行文件并添加。例如名为“subexe.exe”的文件,则资源设计cs文件将添加以下代码:
    internal static byte[] SubExe 
            get 
                object obj = ResourceManager.GetObject("SubExe", resourceCulture);
                return ((byte[])(obj));
            
        
    

    添加一个方法来访问你的资源,这也很简单,只需在你的资源设计器cs文件中添加以下代码

    
    public static byte[] GetSubExe()
        
            return SubExe;
        
    

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

    
    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);
            
    

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

【讨论】:

根据您的要求,我更新了答案。如果您需要完整代码,请将您的个人电子邮件发给我,我会回复完整代码。 此代码会使 exe 在运行时变得易受攻击。我可以检查正在运行的进程,转到文件夹,然后复制 exe 并摆脱包装器。所以这真的不是那么安全。 绝对同意,应该直接在内存中运行,但老实说我不知道​​如何在内存中执行。

以上是关于在 C# 中将 Exe 文件作为嵌入式资源运行的主要内容,如果未能解决你的问题,请参考以下文章

C# 应用程序中的资源和嵌入式资源有啥区别?

C#嵌入dll到资源释放的问题

在 WPF 项目中将 DLL 作为嵌入式资源包括在内

c# 嵌入资源文件

在 c# 中从其他资源中引用嵌入式资源

以编程方式加载嵌入式资源文件