有没有办法将我的.net可执行文件(C#/ VB.Net)嵌入到像C / C ++文件这样的二进制二进制文件中,它会在启动时加载.net程序集? 就像在.net组件周围构建原生墙一样?
答案 0 :(得分:2)
您可以将.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中,并将原始数据传递给上面的proc。
MyTools.RunInternalExe(Resources.ExeData);
当然,如果你想要你的包装器.exe是非托管的,你必须将上面的代码翻译成C ++或你选择的其他语言,这就是我现在的头脑......