可能重复:
将 *.exe 嵌入到 dll 中
我有一个 C# 项目 - 一个类库 - 生成一个 DLL 文件。
该项目在其自身内部运行一个外部 .exe 文件。(使用标准的 Process 东西,它工作正常。)
但是,我的问题是:如何将外部 .exe 文件烘焙到项目中,这样最终消费者只会收到最终的 DLL 文件,而不会看到 .exe 文件本身?
这将使我的客户更快乐,因为他将继续接收一个 DLL 文件(和以前一样,在我需要 .exe 之前)。
可能重复:
将 *.exe 嵌入到 dll 中
我有一个 C# 项目 - 一个类库 - 生成一个 DLL 文件。
该项目在其自身内部运行一个外部 .exe 文件。(使用标准的 Process 东西,它工作正常。)
但是,我的问题是:如何将外部 .exe 文件烘焙到项目中,这样最终消费者只会收到最终的 DLL 文件,而不会看到 .exe 文件本身?
这将使我的客户更快乐,因为他将继续接收一个 DLL 文件(和以前一样,在我需要 .exe 之前)。
如果您要将它作为外部进程启动,它需要存在于磁盘上。它可以作为资源嵌入到 .dll 中并按需提取。
您最好的选择是使 exe 成为嵌入式资源。
如果您的客户在运行时需要 .exe,那么您最好确保他拥有 .exe 的副本。恕我直言...
PS:
您可以通过将 .dll 作为资源(作为“特洛伊木马”)嵌入,然后在运行时将其提取来“欺骗”客户端。恕我直言,这将是愚蠢的。昂贵的。并且有风险。
如果您需要 .exe,请发送 .exe。并明确说明。
如果客户明确拒绝拥有 .exe - 那么您的实施违反了要求,您需要重新设计。
“exe-as-resource”解决方法......是谎言和作弊。它甚至不是一个非常有效或安全的作弊方法。
还:
附带说明一下,请记住,当您将文件从资源拉到磁盘然后在其上执行代码时,您可能会触发 Windows 数据执行保护 - 基本上,Windows 会尝试自动检测是否应该是代码或数据,并且如果它看起来像数据(资源会这样),那么它将阻止该数据作为代码执行。
如果您的 .NET 程序集要通过网络而不是本地驱动器使用,这将成为一个特别棘手的问题 - 有各种 .NET 安全配置可能会阻止它正常工作。