目錄結構:
contents structure
[+]建立windows服務
配置安裝windows服務
在visual studio中除錯
常見問題
最近寫了乙個tcp連線的程式,由於這種通訊協議不同於http協議,因此還不能部署到**上面,於是就用到了window服務。接下面筆者介紹一下在visual studio中如何安裝、除錯windows服務。筆者的visual studio版本為2012,window版本為win7。
這時候點選「啟動」按鈕,會提示我們啟動失敗。
這因為windows服務不能像普通視窗程式那樣啟動,接下來就安裝服務。
在service1.cs上右鍵,選擇「檢視設計器」,
然後再在上面的空白處,右鍵選擇「新增安裝程式」,
這時候,visual studio就會自動為我們生成乙個projectinstaller.cs檔案,接下來,右鍵projectinstaller.cs,選擇「檢視設計器」,就可以看到如下的介面,
可以看到兩個控制項,點選右擊第乙個控制項,開啟屬性設計器,將其中的account設定為localsystem(本地服務),
接下來,右擊上面的第二個控制項,開啟屬性介面,設定servicename,和將其中的strattype設定為automatic,
接下來,為了測試需要,筆者寫一些測試**:
public上面的**,筆者寫到service1.cs類中,該類是visual sudio在啟動的時候,自動為我們建立好的類檔案。觀察這個類檔案,可以發現,該類繼承了servicebase,servicebase是服務類的基類,也就是說想要建立服務,必需繼承這個類,servicebase中有兩個方法比較常用,分別為onstart()和onstop(),顧名思義,onstart方法在服務啟動的時候呼叫,onstop方法在服務停止的時候呼叫。partial
class
service1 : servicebase
protected
override
void onstart(string
args)
protected
override
void
onstop()
internal
void _mytimerelapsed(object
sender, elapsedeventargs e)
}catch
(exception ex)
}catch
(exception ex)}}
在測試**寫好後,我們就可以點選 生成》生成解決方案,如果後需修改了,那麼需要點選重新生成解決方案:
在解決方案生成好後,接下來就是安裝windows服務了。
找到上面專案中 bin\debug 目錄下生成的exe檔案,這裡筆者的位置為 d:\dev\test\day20171218\mywindowsservice\mywindowsservice\bin\debug\mywindowsservice.exe
在cmd中進入到對應的版本中,
然後通過installer.exe進行安裝,安裝的時候,需要指定生成了服務exe檔案的位置,比如:
installutil.exe d:\dev\test\day20171218\mywindowsservice\mywindowsservice\bin\debug\mywindowsservice.exe如果想要解除安裝,只需要在installutil.exe後面加上/u就可以了,比如:
installutil.exe /u d:\dev\test\day20171218\mywindowsservice\mywindowsservice\bin\debug\mywindowsservice.exe服務安裝好後,就可以啟動服務了。
按下「win+r」開啟執行介面框,然後輸入services.msc,進入到服務介面,找到自己對應的服務,啟動。
在上面的onstart方法中,我們在c盤下面列印了日誌,接下來,開啟上面的c盤下面的log.txt,
可以看到日誌已經成功列印了。
到這裡為止,乙個window server的服務程式,就完成了,接下來,筆者介紹如何在visual studio中除錯windows服務程式。
windows服務的除錯和普通程式也不一樣,
首先在**設定斷點,在上面的_mytimerelapsed方法中新增debugger.launch()方法即可。
這裡可以重新生成一下解決方案,然後選擇 除錯》附加到程序
如果沒有,重新整理一下就出來了。
接下來,重啟一下服務,就可以正常除錯了。
如果安裝windows服務的時候,出現報錯securiy exception,那麼應該以管理員的身份啟動視窗。
如果安裝windows服務的時候,出現system.componentmodel.win32exception,那麼是因為在visual studio中設定serviceprocessinstaller1時候,沒有把account設定為lcoalsystem.
C C 動態建立物件
一.用new和delete申請記憶體 在c 中用new和delete代替malloc和free 申請乙個物件 int p new int 釋放 delete p 注意 1 new的返回值就是物件指標,不用再轉換了 2 new的時候可以設定初值 new int 12 申請多個物件 int p new ...
C C 建立多級目錄
c執行時庫提供的建立目錄的函式 mkdir 在上級目錄不存在時會建立失敗。所以自己實現了一下建立多級目錄,無論上級目錄是否存在。include include include include includeusing namespace std 得到檔案路徑的目錄 string getpathdir...
c c 建立刪除檔案操作
最近溫習c語言功課,一直為返回字串陣列問題所困擾,網搜無完整應用資訊,不得其法,經過不斷實踐修改,略有所悟,記錄如下 char funfilepath char arrfilename,int nlength int createfile char contenttxt,int nlength in...