最近在做乙個windows服務的專案,發現並解決了一些問題,拿出來和大家分享一下,以下windows服務簡稱「服務」
文章會在適合時間更新,因為朋友們在不斷提出新的意見或思路,感謝~。~
1.服務如何在某種情況下彈出乙個窗體?
第一種解決辦法,用安裝程式的**修改登錄檔來完成:
1.右擊服務的檢視設計介面的空白處,新增安裝程式
2.右擊預設的serviceprocessinstaller1-->屬性-->account屬性設定為localsystem
3.右擊安裝程式空白處-->檢視**,新增以下**
public這個方法很多,也可以在網上搜到override
void
install(idictionary stateserver)
catch
(exception e)
}public
override
void
uninstall(idictionary stateserver)
catch
(exception e)
finally
}
第二種解決辦法,用bat批處理檔案修改登錄檔完成(如果已經執行的服務不是localsystem賬戶,是不允許與桌面互動的)
建立乙個bat檔案,寫入以下**,儲存並雙擊執行,點選 y 回車更改服務賬戶
reg add hkey_local_machine\system\currentcontrolset\services\自己服務的名稱/v objectname /t reg_sz /d localsystem
如果想直接修改登錄檔,在以上**前加"echo y|" (沒有雙引號) 這樣雙擊執行的時候就可以直接修改了
第三種解決辦法也是最簡單的辦法,通過手動修改
開啟服務控制器,右擊要修改賬戶的服務屬性,登入選項卡,修改為本地系統賬戶,並允許與桌面互動
2.服務如何獲取程式當前的路徑?
服務中使用environment.currentdirectory獲取的是system32的路徑
解決辦法:新增引用:window.form
(其它方法暫時還沒有嘗試,所以先不寫了)
3.如何使用timer?
和form不同,服務有專門的timer
右擊工具箱"選擇項",.netframework元件:找到timer
別搞成form裡的timer
4服務的更新
服務有時候出了問題也會用到更新,安裝服務機子少時候可以自己手動更新,多的話,像上百臺或更多,在做需求的時候就要想到更新程式是如此的重要
我就是在這方面吃了大虧,請朋友們引以為戒
1.兩個服務一定要分開兩個專案來寫,如果在乙個專案裡寫兩個服務,在更新的時候就會提示程式正在訪問無法執行而更新失敗
2.b服務要設定為手動啟動,如果早與a服務自動啟動。並且a服務檢測到有更新檔案,將無法完成b服務的更新
3.b服務設定為手動啟動,並不是讓你手動去啟動b服務。是通過a來啟動b。
啟動方式如下:
條件:b服務為localsystem,並且b服務已經安裝完成
利用程序啟動b服務
public其它方式有待改進,暫不貼出void
runservice()
catch
(exception)
}
5服務的除錯
個人知道的有兩種服務除錯的方式
1是用vs,附加到程序來做除錯,步驟比較簡單但也有缺點
(1)安裝和啟動乙個服務以後,點選vs中的除錯-->附加到程序(注意選擇"附加到"這個選項,一定要是自己程式的**,我用的.net4.0,所以我選擇的是"託管4.0版**")
(2)找到自己的程式程序,附加即可
這種方式的缺點:因為是在啟動以後才可以附加到程序.服務的onstart方法無法除錯。所以我一般都會把**放到onstop方法裡除錯
2是做除錯日誌,每個步驟寫日誌的方式來檢測服務是否正常啟動等(我一直沒用過,暫無介紹)不過個人認為這種方式也會有缺點.沒有斷點除錯那樣直觀
不過有機會可以試試這種方式
多說都是淚,方法和思路都是自己試出來的,有什麼**或思路錯誤請朋友們提出,對的點個贊,謝謝~
感謝區:
C 操作Windows服務的一些方法
學習 主要方法 啟動某個服務 停止某個服務 判斷是否安裝了某個服務 判斷某個服務是否啟動 在操作windows服務之前,先新增引用 system.serviceprocess 1.判斷是否安裝某服務 判斷是否安裝了某個服務 public static bool iswindowsserviceins...
windows的一些命令
start 檔名 自動用預設程式開啟檔案 例 start a.txt 自動用記事本開啟a.txt 還有 c windows 這樣的,可以直接開啟相應的資料夾 在執行視窗輸入 scanreg fix 用於檢測掃瞄登錄檔 scnareg restore 則可以使登錄檔恢復到最近幾天的樣子 ipconfi...
c 開發windows服務
摘自 微軟的專案模板能很好的支援windows服務開發,如c 的windows服務專案 c 開發的話,也不難,使用一些api就能實現,下附 cpp view plain copy include stdafx.h include windows.h define service name srv d...