C C 建立Windows Service服務

2022-05-02 23:30:11 字數 3216 閱讀 3296

目錄結構:

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

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)}}

上面的**,筆者寫到service1.cs類中,該類是visual sudio在啟動的時候,自動為我們建立好的類檔案。觀察這個類檔案,可以發現,該類繼承了servicebase,servicebase是服務類的基類,也就是說想要建立服務,必需繼承這個類,servicebase中有兩個方法比較常用,分別為onstart()和onstop(),顧名思義,onstart方法在服務啟動的時候呼叫,onstop方法在服務停止的時候呼叫。

在測試**寫好後,我們就可以點選 生成》生成解決方案,如果後需修改了,那麼需要點選重新生成解決方案:

在解決方案生成好後,接下來就是安裝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...