将一个 .exe 文件集成到 Visual Studio 项目中

3

问题描述:

我有一个使用c#编写的程序,在cmd中调用了一个.exe文件(使用process.start),并传递了一些必要的参数。

我的目标是:将这个.exe文件包含到项目中,这样就不需要再调用cmd了。

请问有什么好的方法吗?

3个回答

6
如果你只是想包含它,以便不必发送两个文件,那么只需将其作为“嵌入式资源”包含到项目中(请参阅项目项选项),然后您可以调用ResourceManager.GetStream并将其写入文件,再调用Process.Start。
如果您想集成该exe的功能,使得不再需要exe(没有Process.Start),则需要源代码...
编辑: 如果exe是.NET,则不需要“写入文件”- 然后可以直接从资源流中加载它作为Assembly/AppDomin并执行它。

1
是的,但你让“将其写入文件”听起来很容易。事实并非如此。你必须确保你将文件写在程序上下文始终具有读/写权限的地方。在实践中,这很难保证。这意味着你只能将EXE写入“Temp”文件夹,否则你的应用程序就会出错。将EXE作为独立依赖项分发更好。即使你提取它后,你仍然需要“调用cmd”,所以这一切都没有意义。 - undefined
2
你是对的 - 对于本机exe来说没错。但是如果是.NET exe,你根本不需要将它写入文件 - 你可以直接从流中加载+执行它,通过AppDomain/Assembly... - undefined
如果使用.NET,你会如何使用AppDomain/Assembly来完成这个任务呢?我是一个新手。 - undefined
1
调用AppDomain.CreateDomain,然后调用.Load()方法。在.Load()中,你需要放入通过ResourceManager读取的程序集的字节数组,而这个程序集包含了那个exe文件。之后,你可以调用.ExecuteAssemblyByName()方法。 - undefined

3

您可以将exe文件作为嵌入式资源添加(只需右键单击解决方案资源管理器中的文件夹,选择“添加现有项”,然后获取其属性并将其设置为嵌入式资源)。但是,您可能无法轻松地在原地执行它-您需要将其保存到磁盘上,然后执行它(这并不能解决您所述的必须ShellExecute .exe文件的问题,但确实解决了必须向最终用户提供多个文件的问题)。

如果您拥有源代码,则可以将exe重新打包为dll,或直接将其集成到程序代码中。


1
如果exe是.NET程序集,您可以使用ILMerge将exe合并到主程序集中。然后,您可以直接调用exe中的代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接