有没有办法将我的 .net 可执行文件 (C#/VB.Net) 嵌入到像 C/C++ 文件这样的 ntive 二进制文件中,从而在启动时加载 .net 程序集? 就像在 .net 程序集周围构建原生墙一样?
最佳答案
您可以将 .Net 二进制文件作为资源嵌入到 C++ 项目中并在运行时加载它,但我怀疑这是提高安全性的推荐方法。
编辑: 有人要源代码,建议我发表评论而不是回答。我刚刚注册了 StackOverflow,但我还没有足够的声誉来发表评论。 但这是我在某些时候使用的一些来源:
public static int RunInternalExe(byte[] rawData, params string[] args)
{
Assembly asm = Assembly.Load(rawData);
MethodInfo mi = asm.EntryPoint;
if (mi == null)
throw new Exception("Entry point not found");
ParameterInfo[] prms = mi.GetParameters();
object[] mtd_args = null;
if (prms.Length > 0)
mtd_args = new object[] { args };
object result = mi.Invoke(null, mtd_args);
if (result is int)
return (int)result;
return 0;
}
将托管的 .exe 嵌入到包装器 .exe 中,并将原始数据传递给上面的过程。
MyTools.RunInternalExe(Resources.ExeData);
当然,如果您希望您的包装器 .exe 是非托管的,您必须将上面的代码翻译成 C++ 或您选择的其他语言,这有点超出了我的理解...
关于c# - 在 native 可执行文件中嵌入 .net 二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24244090/