【Windows Service】Windows Service在Visual Studio中安裝、調試

來源:互聯網
上載者:User

標籤:oid   nta   public   ntb   重啟   window   調用   using   ali   

目錄結構:

contents structure [-]
  1. 建立Windows服務
  2. 配置
  3. 安裝Windows服務
  4. 在Visual Studio中調試
  5. 常見問題

最近寫了一個TCP串連的程式,由於這種通訊協定不同於HTTP協議,因此還不能部署到網站上面,於是就用到了Window服務。接下面筆者介紹一下在Visual Studio中如何安裝、調試Windows服務。筆者的Visual studio版本為2012,window版本為win7。

1.建立Windows服務

這時候點擊“啟動”按鈕,會提示我們啟動失敗。

這因為Windows服務不能像普通視窗程序那樣啟動,接下來就安裝服務。

2.配置

在Service1.cs上右鍵,選擇“查看設計器”,

然後再在上面的空白處,右鍵選擇“添加安裝程式”,

這時候,Visual Studio就會自動為我們產生一個ProjectInstaller.cs檔案,接下來,右鍵ProjectInstaller.cs,選擇“查看設計器”,就可以看到如下的介面,

可以看到兩個控制項,點擊右擊第一個控制項,開啟屬性設計器,將其中的Account設定為LocalSystem(本地服務),

接下來,右擊上面的第二個控制項,開啟屬性介面,設定ServiceName,和將其中的StratType設定為Automatic,

 

接下來,為了測試需要,筆者寫一些測試代碼:

   public partial class Service1 : ServiceBase    {        private readonly Timer _MyTimer;        public Service1()        {            InitializeComponent();            _MyTimer = new Timer(10*1000); //10秒鐘啟動一次            _MyTimer.Elapsed += _MyTimerElapsed;        }        protected override void OnStart(string[] args)        {            _MyTimer.Start();        }        protected override void OnStop()        {            _MyTimer.Stop();        }        internal void _MyTimerElapsed(object sender, ElapsedEventArgs e)        {            try            {                //添加往C盤建立一個文字檔的程式                try                {                    string logFileName = @"C:\\log.txt"; // 檔案路徑                    FileInfo fileinfo = new FileInfo(logFileName);                    using (FileStream fs = fileinfo.OpenWrite())                    {                        StreamWriter sw = new StreamWriter(fs);                        sw.WriteLine("=====================================");                        sw.Write("添加日期為:" + DateTime.Now.ToString() + "\r\n");                        sw.WriteLine("=====================================");                        sw.Flush();                        sw.Close();                    }                }                catch (Exception ex)                {                    //  ex.ToString();                }            }            catch (Exception ex)            { }        }    }

上面的代碼,筆者寫到Service1.cs類中,該類是Visual Sudio在啟動的時候,自動為我們建立好的類檔案。觀察這個類檔案,可以發現,該類繼承了ServiceBase,ServiceBase是服務類的基類,也就是說想要建立服務,必需繼承這個類,ServiceBase中有兩個方法比較常用,分別為OnStart()和OnStop(),顧名思義,OnStart方法在服務啟動的時候調用,OnStop方法在服務停止的時候調用。

 

在測試代碼寫好後,我們就可以點擊 產生》產生解決方案,如果後需修改了,那麼需要點擊重建解決方案:

在解決方案產生好後,接下來就是安裝Windows服務了。

3.安裝Windows服務

找到上面項目中 bin\debug 目錄下產生的exe檔案,這裡筆者的位置為  D:\Dev\Test\day20171218\MyWindowsService\MyWindowsService\bin\Debug\MyWindowsService.exe 

然後在開啟cmd,進入到.net對應版本的目錄中,這裡筆者的版本為4.0,可以通過查看 C:\Windows\Microsoft.NET\Framework ,目錄下的版本資訊,一般情況下,最高版本為目前的版本。

在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服務程式。

4.在Visual Studio中調試

Windows服務的調試和普通程式也不一樣,

首先在代碼設定斷點,在上面的_MyTimerElapsed方法中添加Debugger.Launch()方法即可。

這裡可以重建一下解決方案,然後選擇  調試》附加到進程

如果沒有,重新整理一下就出來了。

接下來,重啟一下服務,就可以正常調試了。

5.常見問題

如果安裝windows服務的時候,出現報錯securiy Exception,那麼應該以管理員的身份啟動視窗。

如果安裝Windows服務的時候,出現System.ComponentModel.Win32Exception,那麼是因為在Visual Studio中設定serviceProcessInstaller1時候,沒有把Account設定為LcoalSystem.

 

【Windows Service】Windows Service在Visual Studio中安裝、調試

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.