Вызов второго проекта Visual Studio программно - PullRequest
5 голосов
/ 13 ноября 2011

Я работаю над решением в Visual Studio 2010 Ultimate, которое содержит два проекта C #: проект Forms и консольный проект. Программно они полностью разделены; Основная часть обоих проектов может работать без другого. То, что я хотел бы сделать, это вызвать консольное приложение, нажав кнопку в приложении Forms, с определенными параметрами, установленными на основе приложения Forms. Таким образом, вы можете думать о приложении Forms как о «приложении запуска».

Способ, которым я сейчас это реализовал, заключается в использовании System.Diagnostics.Process.Start с "cmd" в качестве первого параметра и пути к исполняемому файлу консольного приложения (плюс аргументы CLI) в качестве второго параметра. Но это ужасное решение, потому что оно сломается при развертывании на других машинах с установщиком.

Я также пытался создать ссылку на консольный проект в объекте Forms, сделать Program в консольном проекте общедоступным и статическим и вызвать метод Main консольного проекта, но поскольку нет действительного дескриптора вывода, в конечном итоге это вызывает исключение.

Я много гуглил, некоторые искали здесь на SO и даже проверяли «Похожие вопросы» на странице представления, и никто, кажется, не знает, как делать то, что я хочу делать. Любые указатели, которые могут поставить меня на правильный путь?

К вашему сведению: я знаю, что есть, вероятно, десять миллионов лучших способов сделать это, но у меня есть несколько причин желать и нуждаться в этом таким образом. Я знаю, что мог бы просто создать отдельный графический интерфейс для программы CLI и скопировать соответствующий код, или объединить все в один проект и создать отдельное окно вывода, или различные другие решения, подобные этим. Но мне нужно это решение по двум причинам: (1) у меня была довольно сложная программа CLI, которая хорошо работает как программа CLI, и теперь мне нужен удобный способ ее запуска, и (2) решение проблемы другими способами не не отвечаете на вопрос «Зачем вообще беспокоиться о том, чтобы в одном и том же решении было несколько исполняемых проектов, если вы не можете вызвать один из другого?»

1 Ответ

5 голосов
/ 13 ноября 2011

То, как вы это делаете, прекрасно - просто нужно немного настроить.

Во-первых, когда вы запускаете, не запускайте cmd со своим исполняемым файлом в качестве параметра, запускайте консольПриложение myapp.exe непосредственно в качестве команды для выполнения в Process.Start.

Следующим шагом является запуск приложения с того места, где оно было установлено.Самый простой подход к этому - просто развернуть оба исполняемых файла бок о бок в одной папке.Используйте Application.StartupPath, чтобы найти папку, из которой было запущено ваше приложение Forms (и, следовательно, где находится другое приложение).Используйте Path.Combine(Path.GetDirectory(Application.StartupPath), "myapp.exe"), чтобы сгенерировать полный путь к исполняемому файлу.

Другой вариант - использовать установщик, который затем может сохранить местоположение другого приложения в известном месте (например, ключ реестра), ноэто намного сложнее для небольшого усиления (если вам не нужен установщик по другим причинам).

...