2009-04-22 61 views
0

我需要創建一個可以用批處理文件激活的應用程序。什麼樣的應用程序最適合非交互式運行?

應用程序將接受文件名的單個字符串參數。然後,它會使用此文件運行一些處理,並將另一個文件放入預定位置並退出。

該應用程序不需要與實際用戶交互。

我的首選平臺是使用C#的.net。

我原本計劃編寫一個控制檯應用程序,但我不確定這是否是最好的主意。

完成此任務的最佳方法是什麼?有沒有辦法創建一個批處理文件觸發的Windows服務?這是更可取的嗎? Windows Form項目會更受歡迎嗎?

回答

3

選項一:控制檯應用程序。使用Windows計劃程序在計劃時間運行它。 (推薦)

選項二:Windows Service具有一些內置調度程序或輪詢器。

0

如果它是非交互式的,控制檯幾乎肯定是要走的路,因爲您可以簡單地將它放在後臺並保持獨立。

0

您當然可以創建一個Windows服務,用於監視要放入特定文件夾的文件。批處理文件可以將文件放入該文件夾中。

雖然我建議您找到更好的理由來做到這一點。問問自己,「比起只運行一個控制檯程序並指定文件名的批處理作業,哪種方式更好?」?

1

開發最快的東西可能是一個控制檯應用程序,帶有由Windows Scheduled Tasks(或類似的東西)觸發的批處理文件。

這樣,你只需要開發應用程序本身的功能,而不是提出一個調度框架。

您還可以利用計劃任務提供的功能,如日誌記錄,輕鬆定製計劃,錯誤報告等。Windows Schdeduled任務的另一個選項可能是使用SQL Server計劃任務,這也提供了一個很好的工作經歷。所有這一切,如果你沿着這條路走下去,你確實有額外的依賴關係,如果你編寫了自己的Windows服務,你可能會消除這些依賴關係。 此外,如果部署是一個問題,那麼使用安裝程序編寫Windows服務可以更好地控制安裝過程。

0

帶有FileSystemWatcher的Windows服務,用於監視相關文件夾而不是始終在線的控制檯應用程序。這就是他們的目的,如果系統失敗了,你不必記得把文件放在上面,你不必把它放到你的Windows啓動中。只需將服務設置爲自動啓動即可。

3

我最喜歡的選項,其中一個我確信我以前的僱主採取作爲公司的政策,如下:

所有服務器類型的應用程序在編寫時沒有任何形式的直接連接的UI。無論是編譯爲控制檯應用程序,作爲Windows應用程序,還是在設計階段都無關緊要 - 使用.NET,其差異歸結爲翻轉編譯器開關。但是,一般來說,由於該程序在沒有直接人爲干預的情況下運行,因此我們通常將其設計爲作爲服務運行 - 服務控制管理器負責啓動和關閉,可以在失敗時重新啓動應用程序,並且執行很多優化在編寫桌面應用程序時很難自行完成的東西。

接下來,您有服務器應用程序監聽網絡上的「admin」進行連接。此管理連接是您的用戶界面。像SSL加密和身份驗證等事情取決於您和您的公司,但在其基礎上,我會建議構建一個基於行的人類可讀界面。通過這種方式,您可以使用telnet連接到它併發出諸如「show connections」,「drop user 52」和「restart」之類的命令。使用此界面可以顯示任何類型的管理行爲,以及任何類型的狀態和統計信息。首先,這有助於調試,其次,它導致下一步...

最後你建立一個用戶界面。一個簡單的可能。該用戶界面的一部分配置是指定要連接的主機和端口,以及任何驗證位。 UI應用程序連接到運行服務的計算機,並通過網絡管理界面發出命令,並解釋結果。在我們公司,每個新的用戶界面都是一個管理單元模塊,作爲大型項目的一部分。該項目將顯示代表各種服務器及其狀態的紅綠燈。點擊服務器將允許您「深入」到該服務器並檢查其狀態或配置的各個方面。

儘管該項目僅在一兩臺服務器上作爲我的小程序開始,但它迅速發展成包括數十臺運行少數服務的服務器,運行在各種操作系統和世界各地的衆多城市。這種簡單的用戶界面策略使我們能夠輕鬆地從單一座位跟蹤和控制數百種這些服務,或同時在不同辦公室的不同辦公室中跟蹤和控制這些服務。

可伸縮性意味着不需要電腦前的某個人點擊您編寫的程序上的按鈕。

相關問題