以编程方式调用第二个Visual Studio项目

时间:2011-11-12 20:38:49

标签: c# visual-studio projects-and-solutions

我正在开发一个包含两个C#项目的Visual Studio 2010 Ultimate解决方案:一个Forms项目和一个控制台项目。在程序上,它们是完全分开的;两个项目的主要部分可以在没有其他项目的情况下运行我想要做的是通过按下Forms应用程序中的按钮来调用控制台应用程序,并根据Forms应用程序设置某些选项。因此,您可以将Forms应用程序视为一个“启动器”应用程序。

我现在实现此方法的方法是使用System.Diagnostics.Process.Start "cmd"作为第一个参数,将控制台应用程序的可执行文件(以及CLI参数)作为第二个参数。但这是一个糟糕的解决方案,因为当使用安装程序部署到其他计算机时会崩溃。

我也尝试在Forms对象中创建对控制台项目的引用,使控制台项目中的Program成为公共和静态,并调用控制台项目的Main方法,但因为没有有效的输出句柄,这最终会导致抛出异常。

我做了很多谷歌搜索,有些在这里搜索,甚至在提交页面上检查了“类似问题”,似乎没有人知道如何做我想做的事情。任何可以让我走上正轨的指针?

仅供参考:我知道可能有一千万种更好的方法可以做到这一点,但我有几个理由想要并且需要这样做。我知道我可以为CLI程序创建一个单独的GUI并复制相关代码,或者将所有内容合并到一个项目中,并创建一个单独的输出窗口,或者其他各种解决方案。但是我需要这个解决方案有两个原因:(1)我有一个相当复杂的CLI程序,它作为一个CLI程序运行良好,现在需要一个用户友好的方式来启动它,以及(2)以其他方式解决问题回答“如果你不能从另一个中调用一个可执行项目,那么为什么首先要在同一个解决方案中使用几个可执行项目呢?”

1 个答案:

答案 0 :(得分:5)

你这样做的方式很好 - 只需要稍微调整一下。

首先,在启动时,不要以可执行文件作为参数运行cmd,直接运行控制台应用程序myapp.exe作为在Process.Start中执行的命令。

下一步是让应用程序从安装的任何位置运行。最简单的方法是简单地将两个可执行文件并排部署在同一文件夹中。使用Application.StartupPath查找启动Forms应用程序的文件夹(以及其他应用程序所在的文件夹)。使用Path.Combine(Path.GetDirectory(Application.StartupPath), "myapp.exe")生成要运行的exe的完整路径名。

另一个选择是使用安装程序,然后可以将其他应用程序的位置存储在已知位置(例如注册表项),但这样的复杂程度会增加很少(除非您出于其他原因需要安装程序)