【问题标题】:Integrating a .exe file into a visual studio project将 .exe 文件集成到 Visual Studio 项目中
【发布时间】:2011-07-20 14:48:19
【问题描述】:

简陋的场景: 我在 C# 中有一个程序,它在 cmd 中调用 .exe(使用 process.start),传递一些必需的参数。

我正在尝试做的事情:将 exe 包含到项目中,这样我就不必调用 cmd。

有什么想法吗?

【问题讨论】:

    标签: c# visual-studio


    【解决方案1】:

    如果您只想包含这样您就不必发送两个文件,那么只需将其作为“嵌入式资源”包含到项目中(请参阅项目项选项),然后您可以调用 ResourceManager.GetStream 并将其写入文件并调用 Process.Start。

    如果您想集成该 exe 的功能以便不再需要该 exe(无需 Process.Start),那么您需要源代码...

    编辑: 如果 exe 是 .NET,则不需要“写入文件” - 然后您可以直接从资源流中加载它作为 Assembly/AppDomin 并执行它。

    【讨论】:

    • 是的,但是您让“将其写入文件”听起来如此简单。它不是。您必须确保将文件写入程序上下文始终具有读/写权限的位置。在实践中,很难确保这一点。这意味着您无法将 EXE 写入“Temp”文件夹,或者您的应用程序中断。将 EXE 作为独立依赖项分发要好得多。一旦你提取它,你仍然将不得不“调用 cmd”,所以这一切都毫无意义。
    • 你是对的 - 对于本机 exe。但是,如果是 .NET exe,您根本不必将其写入文件 - 您可以通过 AppDomain/Assembly 从流中加载 + 执行它...
    • 如果在 .NET 中使用 AppDomain/Assembly,您将如何使用它?我是新手。
    • 调用 AppDomain.CreateDomain 然后 .Load ().. 在 Load 中,您将通过 ResourceManager 读取的程序集的字节数组放入该程序集,该程序集又包含该 exe。之后你可以调用 .ExecuteAssemblyByName()
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-19
        • 1970-01-01
        • 2012-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多