最近工作上有定時更新資料庫中某產品數量的要求,主要是同步記錄顯示產品的使用情況。開始是在global.asax檔案中通過寫計時器進行更新。但是資料庫中的資料還是沒有更新。而寫的txt日誌上有記錄。網上看了很多態別的情況。有人說是iis**了。並且是只是第乙個訪問的使用者才會對設定的定時器有效。於是,根據博友的建議嘗試寫個window服務。
以前也沒有弄過,找了下資料。依葫蘆畫瓢新建專案->選擇windows 服務,在產生的service1.cs檔案中開啟右鍵檢視**。在對應的方法上寫了計時器和資料操作。
宣告定時器: system.timers.timer timer1;
onstart方法:
timer1 = new system.timers.timer();
timer1.interval = 600000; //設定計時器事件間隔執行時間
timer1.elapsed += new system.timers.elapsedeventhandler(timer1_elapsed);
timer1.enabled = true;
//執行sql語句或其他操作
try catch (exception ex){
console.write(ex.message);
接著是在檢視介面點選新增安裝程式。會產生projectinstaller.cs。開啟會有serviceprocessinstaller1元件,點選設定屬性的account的值為localsystem。serviceinstaller1元件設定屬性servicename的值.這就是你在任務管理器,服務裡面看到的那個名稱,starttype設定為automatic自動。在右鍵**裡面新增如下**:
public projectinstaller()
initializecomponent();
this.committed += new installeventhandler(projectinstaller_.committed);
private void projectinstaller_.committed(object sender, installeventargs e) {
//引數為服務的名字
system.serviceprocess.servicecontroller controller = new system.serviceprocess.servicecontroller("servicename的值");
controller.start();
在生成選單欄點選生成(解決方案的名稱)。然後通過執行vs的命令提示 installutil window服務路徑進行安裝,安裝啟動後我們就可以在任務管理器的服務選項卡看到我們的那個服務了。解除安裝的命令:installutil /u window服務路徑.這裡安裝的時候一般要放到系統對應的框架目錄下,否則會安裝異常。我這裡用了linq to sql.檢視系統日誌時提示sa使用者提示密碼不對。但我一直連線都是sa賬戶密碼應該沒有問題,後來我更改連線為本地(.)就可以更新資料了。
很多東西做過了不記下來很快就忘記了。所以決定以後都寫下自己經歷過的新知識點。好好實踐總結提高自己。
關於開發Windows服務程式容易搞混的地方!
在開發windows服務程式時,我們一般需要新增安裝程式,即 serviceinstaller,裡面有幾個關於名稱屬性,你都搞明白了嗎?1.description 表示服務說明 描述服務是幹什麼的 2.displayname 表示友好名稱,可以理解為服務名的別名 3.servicename 表示服務...
關於開發Windows服務程式容易搞混的地方!
在開發windows服務程式時,我們一般需要新增安裝程式,即 serviceinstaller,裡面有幾個關於名稱屬性,你都搞明白了嗎?1.description 表示服務說明 描述服務是幹什麼的 2.displayname 表示友好名稱,可以理解為服務名的別名 3.servicename 表示服務...
關於開發Windows服務程式容易搞混的地方!
在開發windows服務程式時,我們一般需要新增安裝程式,即 serviceinstaller,裡面有幾個關於名稱屬性,你都搞明白了嗎?1.description 表示服務說明 描述服務是幹什麼的 2.displayname 表示友好名稱,可以理解為服務名的別名 3.servicename 表示服務...