【问题标题】:.NET: embed an EXE file into my project.NET:将 EXE 文件嵌入到我的项目中
【发布时间】:2010-03-04 23:06:00
【问题描述】:

我知道这种情况很奇怪,但是我需要在我的项目中嵌入一个 EXE 文件(或汇编代码),所以它只能由应用程序启动(它不能在文件系统中创建 EXE 并启动它)...

有可能吗?

编辑:

它不是 .NET EXE。无论如何,我将 Test.exe 文件作为资源添加到我的项目中,我这样做了

   Dim exestr As Stream = Nothing
   Dim a As Assembly = Assembly.GetExecutingAssembly
   exestr = a.GetManifestResourceStream("Test.exe")  

【问题讨论】:

  • 这是不可能的。你为什么要这样做?

标签: vb.net embed exe


【解决方案1】:

不可能。这是 Dave Cutler 和他的同事在设计 Windows NT 时做出的核心设计决定。进程必须由文件系统上的文件支持。 Windows 使用内存映射文件将进程的代码映射到虚拟内存。这对于 .NET 程序来说并没有什么不同,即使它的很多代码都被 JIT 编译到内存中。包含 IL 的程序集以相同的方式映射。

不仅有利于高效的操作系统运行,用户和病毒扫描程序真的不喜欢突然冒出的可执行代码。

【讨论】:

    【解决方案2】:

    如果 EXE 是一个 .Net 程序集,您可以将编译后的二进制文件嵌入到您的(外部)程序中,使用 Assembly.Load(byte[]) 加载它。 编辑:既然不是,你就不能。

    加载程序集后,您可以像任何其他程序集一样从内部程序集中调用函数(例如Main 方法),也可以编写AppDomain.CurrentDomain.ExecuteAssembly(innerAssembly.FullName)

    【讨论】:

    • 我会保留这个答案以供参考。
    【解决方案3】:

    我正在考虑创建一个 RAM disk,从您的 .NET 资源文件中将您的 exe 文件写入其中,然后在那里执行该文件。没有任何东西触及物理磁盘。

    我没有可编程 RAM 磁盘 API 的链接,但您可能会从您的程序中找到要操作的东西。另一个好处是病毒扫描程序仍然可以确认它的安全性。

    我还在想,如果您的应用程序在磁盘上运行,那么没有充分的理由说明相关可执行文件也不能在磁盘上。如果您通过网络将其导入(下载)或其他方式,请先保存到磁盘并在执行完毕后将其擦除

    【讨论】:

    • 谢谢你,我会试试的,希望有效...无论如何我不想写和打开文件,因为用户不应该复制第二个 exe 并在他们想要的时候启动它。
    • 到底是RAM盘解决方案吗?只是好奇。如果是这样,您使用什么软件来实现它?
    • 我认为问题在于 RAM 磁盘需要已经安装了第 3 方软件。如果你能做到这一点,为什么你不能只写入文件系统?
    猜你喜欢
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 2013-11-08
    相关资源
    最近更新 更多