我有一个给定的代码以非托管C++编写,我将其作为资源添加到C#程序中。将非托管EXE作为资源合并到受管理的C#代码中
当试图使用Assembly.Load
加载非托管EXE时,我得到一个BadImageFormatException
,其InnerException表示“IL格式不正确”(显然)。
我该如何做这项工作?
我知道使用代码作为DLL会更好,但由于某种原因,dll调用的行为与当我使用System.Diagnostics.Process.Start
运行非托管exe的行为方式不同。
而我不想有两个分离的EXE文件。任何想法?
编辑: OK,我不再需要做到这一点。我的dll表现出不同的方式,因为我在不同的环境中使用它(winform而不是控制台);因此导致问题的函数SetThreadDesktop
无法按预期工作。现在要关闭帖子,谢谢所有回答的人。
你想使用这个非托管可执行文件?运行?您必须将嵌入式EXE保存到%TEMP%路径,并使用Process.Start来完成。然后使用'WaitForExit',并删除EXE清理。 – vcsjones 2012-03-05 16:51:47
确实是个好主意,但我宁愿在不生成嵌入式EXE的情况下进行此项工作 – GianT971 2012-03-05 17:00:55
您应该能够使用C++/CLI编译器将C++编译为混合模式程序集,并将其与您的C#代码成一个文件。 – 2012-03-05 17:20:27