2011-05-15 68 views
1

儘管我的搜索引擎很全面,但我仍然對這個問題感到困惑。c#主要項目和服務

讓我解釋一下我的情況。我創建了一個C#項目,使用戶能夠手動備份數據庫(通過單擊按鈕)。現在,用戶必須能夠安排數據庫備份自動運行的時間。爲了實現這一點,我計劃創建一個服務,當達到設定的備份時間時,通過Windows調度程序啓動服務。

我需要部署與主體工程沿服務(在我的腦海中,服務將是一個不同的項目。也許我錯在這裏。)。

我的問題是如何當用戶安裝主體工程我部署的服務?

PS:我使用的是c#express和sql 2008 R2 express。

+0

「通過Windows調度程序啓動的服務」 - 是指實際的Windows服務,還是單獨的實用程序.exe? (或者甚至內置在主要.exe中的代碼通過命令行開關激活?)如果您使用調度程序,則可能不需要編寫完整的服務。 – Rup 2011-05-15 17:12:26

+0

@Rup好處是,如果使用該應用程序的用戶具有適當的權限,則可以從UI遠程創建計劃任務。 @Yash除非我們只談論幾個數據庫,否則你可能仍然需要一些集中的DB來跟蹤計劃任務。否則,您可能很難追蹤您設置的所有任務。 – TheHurt 2011-05-15 17:23:14

+0

Rup可以給我更多的細節,或者鏈接到一些有關代碼的文檔,它們使用命令行開關構建main.exe。 – Yash 2011-05-15 17:24:43

回答

1

你用什麼來安裝主應用程序。有可能你說的打包工具也會有掛鉤讓你安裝服務。例如,如果您使用Wix創建msi包來安裝主應用程序,那麼您可以配置Wix以安裝該服務。

This google search將指向您爲同一相關文章。

反之,如果你不使用任何安裝工具,說你只是爲用戶提供包含所有可執行一個zip,那麼你就需要手動安裝服務。 This article是完美的創建一個自我安裝的服務。您可以使用Process.Start來執行installutil exe來實施安裝/卸載服務。

EDIT1: 大廈RUP對你的問題的評論,你已經有了需要備份數據庫的代碼。所有你需要的,是能夠安排這一點。一旦用戶在您的用戶界面中輸入時間表,您可以在任務計劃程序中創建相應的任務。讓這個任務執行你的主應用程序,傳遞參數-backup "dbName"或者前面提到的備份代碼運行所需的任何信息。

您可以使用following template [這是爲一個控制檯應用程序,但會工作得很好了您的GUI應用程序也是如此。所有你需要檢查的是,如果任何交換機已經通過,那麼不啓動gui,而是簡單地執行備份功能代碼。] ...在StackOverflow上還有很多existingquestions,命令行解析工具使用...

0

我會採取的方法是創建該項目的用戶界面,爲服務創建一個項目。該服務將是一個始終運行的Windows服務,並負責創建計劃任務。 (而不是讓計劃任務啓動服務。)如何創建計劃任務是相當開放的,您可以剔除AT,或者您可以使用TaskScheduler類型庫進行一些COM交互操作。我希望這有幫助。