2011-11-12 53 views
5

我正在研究包含兩個C#項目的Visual Studio 2010 Ultimate中的解決方案:Forms項目和控制檯項目。以編程方式,它們是完全獨立的;兩個項目的主要部分都可能沒有其他項目。我想要做的是通過按下Forms應用程序中的按鈕來調用控制檯應用程序,並根據Forms應用程序設置某些選項。因此,您可以將Forms應用程序視爲基本上只是一個「啓動器」應用程序。以編程方式調用第二個Visual Studio項目

我現在執行的方式是使用System.Diagnostics.Process.Start"cmd"作爲第一個參數,並將控制檯應用程序可執行文件的路徑(加上CLI參數)作爲第二個參數。但這是一個糟糕的解決方案,因爲使用安裝程序將其部署到其他機器時會中斷。

我也嘗試創建控制檯項目中窗體對象的引用,使得Program在控制檯項目的公共和靜態的,並調用控制檯項目的Main方法,但因爲沒有有效的輸出處理,這最終會導致拋出異常。

我已經做了很多谷歌搜索,一些在SO搜索,甚至在提交頁面上檢查了「類似問題」,似乎沒有人知道如何去做我想做的事情。任何可能讓我走上正軌的指針?

僅供參考:我知道可能有一千萬以上的方法可以做到這一點,但我有幾個理由需要這樣做。我知道我可以爲CLI程序創建一個單獨的GUI並複製相關代碼,或者將所有內容合併到一個項目中,並創建一個單獨的輸出窗口或其他各種解決方案。但我需要這個解決方案的原因有兩個:(1)我有一個相當複雜的CLI程序,作爲一個CLI程序運行良好,現在需要用戶友好的方式來啓動它,(2)以其他方式解決問題doesn回答「如果你不能從另一箇中調用一個,爲什麼還要在同一個解決方案中首先安排好幾個可執行項目?」

回答

5

你這樣做的方式很好 - 它只需要一點調整。

首先,啓動時,不要以可執行文件作爲參數運行cmd,直接運行控制檯應用程序myapp.exe作爲在Process.Start中執行的命令。

下一步是讓您的應用程序從安裝位置開始運行。最簡單的方法是簡單地將兩個可執行文件並排放置在同一個文件夾中。使用Application.StartupPath來查找您的Forms應用程序從其中啓動的文件夾(以及其他應用程序駐留的位置)。使用Path.Combine(Path.GetDirectory(Application.StartupPath), "myapp.exe")來生成要運行的exe的完整路徑名。

另一個選擇是使用安裝程序,然後可以將其他應用程序的位置存儲在已知位置(例如註冊表項)中,但是這樣做的複雜程度要小得多(除非您因爲其他原因需要安裝程序)。

+0

Ack!爲什麼微軟不能讓事情變得更簡單?非常感謝答覆和建議。 – Mrrvomun

相關問題