2011-12-06 72 views
4

我有一個Windows應用程序,我用C#4和WPF編寫;我現在被問到是否可以添加命令行參數(例如/ console),強制它作爲控制檯應用程序運行,以便它可以由任務計劃程序運行。是否可以在控制檯窗口中運行Windows應用程序?

這是可能與現代應用程序?或者我需要創建一個單獨的控制檯應用程序?

UPDATE:可我只是強調,這是一個WPF應用。沒有方便的static void Main(string[] args)入口點掛鉤。但是,PM仍希望該應用在從命令行運行的能力...

最後更新:伎倆,如@ RodH257指出,是在WPF應用程序codegens預期靜態無效的主要。您可以使用相同名稱的方法添加您自己的類,並在項目構建屬性中將其設置爲可執行文件的啓動對象。您還需要方法中的[STAThread]屬性,以便WPF也能正常運行。

+2

是的,這是可能的! –

+0

供參考:剛寫了一篇關於我如何打開WPF窗口,並隱藏/顯示控制檯窗口的帖子。信息遍佈整個地方,所以我決定發佈我如何在自己的項目中工作:http://stackoverflow.com/questions/479014/wpf-window-from-a-console-project/33441726#33441726 –

回答

1

你可以將它變成控制檯應用程序並手動顯示第一個WPF對話框。就像你,如果你正在創建一個DLL和啓動一個WPF窗口,如下面

static class Program 
{ 
    static void Main(params string[] args) 
    { 
     if (args.Length > 0) 
     { 
      //do stuff here 
      return; 
     } 
      Window1 window = new Window1(); 
      window.ShowDialog(); 
    } 
} 

OR,看看這個鏈接編輯基於參數 How to write custom Main method for a WPF application?您當前的WPF項目和行爲的入口點

編輯: 更新後的帖子,使其更清楚描述的確切情況。

+0

不幸的是,如上所述,該應用程序是一個WPF應用程序,並沒有一個方便的Main入口點。 –

+0

我已經更新了我的答案,以便更清楚。創建一個控制檯應用程序項目作爲入口點,然後創建一個新的Window實例。 – RodH257

+0

非常感謝 - 您的鏈接指向最佳解決方案(方法#3,如果您想知道)。 –

2

您可以使用dos命令從控制檯應用程序中啓動它,但除非在運行時修改啓動例程(在Main()中),否則它將加載並顯示主窗口...如果您不'噸要顯示在主窗口中,只是重新編碼主程序,使一個Main()參數禁用選項...

取而代之的是:

[STAThread] 
    static void Main() 
    { 
     Application.Run(new MainForm()); 
    } 

這個代碼:

[STAThread] 
    static void Main(params string[] args) 
    { 
     if(args.length <= 1) 
       Application.Run(new MainForm()); 
     else if (args[1].StartsWith("C")) // "C" for "C"onsole version 
       // Do whatever needs to be done to start 
       // functionality for console app version 
    } 

然後,當你運行它,添加/ C開關:

C:\MyCurrentDirectory>MyWinFormsApplicationName.exe /C 
+0

不幸的是,如上所述,該應用程序是一個WPF應用程序,並沒有一個方便的Main入口點。 –

4

是的,一個Windows GUI應用程序有一個Main就像一個控制檯應用程序。所以訣竅是在啓動UI循環之前進行一些預處理Main。應該注意的是,如果您想在Visual Studio中編譯爲.NET「Windows應用程序」的應用程序中使用控制檯,則必須手動輸入AllocConsole,因爲默認情況下您不會得到一個。

This MSDN forum thread討論了一些關於「混合控制檯/ GUI應用程序」的內容。

0

這非常依賴於程序最初的編寫方式。

如果您已經以鬆散耦合的方式編寫了您的邏輯,您可以創建另一個控制檯應用程序並在那裏重用您的邏輯。這是手動編程/重構工作。

-1

這裏是article/code sample showing how it's done。構建類型很重要。你的編譯器只允許你有一個構建目標(例如GUI,命令行)。

+0

不幸的是,如上所述,該應用程序是一個WPF應用程序,並沒有一個方便的Main入口點。 –

0

如果它由任務調度程序運行,則根本不需要任何屏幕。根據命令行刪除startupuri並手動啓動窗口。

如果它的控制檯啓動了進程,只需進行任何你需要的處理。否則,啓動你的Windows ...

+0

由您的建議提示,我發現http://www.dutton.me.uk/2011/02/21/how-to-handle-command-line-arguments-in-wpf-applications/,但是我發現如果我嘗試調用Console.WriteLine,然後不出現輸出。我需要使用類似log4net的東西來獲取輸出嗎? –

+0

多數民衆贊成,我傾向於做基於服務器的東西,我想在後臺運行....或有時登錄到數據庫中的東西。 –

相關問題