windows 服務實例

參考來源:http://blog.csdn.net/morewindows/article/details/6858216

參考來源: http://hi.baidu.com/tfantasy/item/aefa43d66b470a2b38f6f76c

剩下的都是我自己整理的。

在VS2012中新建一個Windows 服務的項目。然后在解決方案目錄下找到Services1.cs,切換到代碼視圖。

這里我代碼的主要工作就是開機自動啟動該windows服務,每三秒往數據庫中插入一條數據。

代碼如下

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;namespace stopvoice
{public partial class Service1 : ServiceBase{System.Timers.Timer timer1;  //計時器public Service1(){InitializeComponent();}protected override void OnStart(string[] args)  //服務啟動執行
        {timer1 = new System.Timers.Timer();timer1.Interval = 3000;  //設置計時器事件間隔執行時間timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Elapsed);timer1.Enabled = true;}protected override void OnStop()  //服務停止執行
        {this.timer1.Enabled = false;}private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e){//執行SQL語句或其他操作//連接數據庫string SQLCONNECT = @"server=192.168.1.212;database=testdb;uid=sa;pwd=888888";SqlConnection conn = new SqlConnection(SQLCONNECT);conn.Open();//通過SqlCommand 類的ExecuteNonQuery() 來返回受影響的行數。string SQLCOMMAND2 = "insert into tb1 values(999,999);";SqlCommand sqlcmd2 = new SqlCommand(SQLCOMMAND2, conn);//也可以用下面代替// sqlcmd.ConnectionString = SQLCOMMAND2int nResult = sqlcmd2.ExecuteNonQuery();Console.WriteLine("受影響行數:", +nResult);Console.ReadLine();conn.Close();}}
}

寫完代碼后在Service1.cs的設計界面右擊,選擇“添加安裝程序”,會出現兩個安裝控件,將servicesInstaller1屬性StartType設成Automatic就是開機自動啟動,ServicesName就是在服務列表里的名稱,可以自定義。servicesProcessInstaller1的屬性設成LocalSystem。然后按F5 啟動運行,會報錯,提示Windows服務啟動失敗,說什么無法從命令行或調試器啟動服務。

windows  服務啟動失敗

這個問題先不管他,但是在我們按F5的那一剎那,這個工程文件夾的Debug目錄就生成了一個叫做Services1.exe的可執行文件了——我們的目的已經達成了。接下來我們要做的就是把這個程序安裝到windows服務。

現在我們需要一個installutil的安裝程序工具,我們可以在C:\Windows\Microsoft.NET\Framework\v4.0.30319中找到他(也許你也能在其他版本里找到它)MSDN告訴我使用 Visual Studio 命令提示符或 Windows SDK 命令提示符可以直接調用到這個Installutil.exe,我試了一下還是提示說這貨不是內部或外部命令,直截了當,把上面的路徑加入環境變量,然后進入我們的CMD窗口吧。切換到剛剛那個項目的Debug目錄下,輸入命令installutil services1.exe(當然也許你的可執行文件不叫services1,我只是提醒一下),此時你在命令行輸入services.msc回車,會發現服務列表里多出了一個你的windows服務。將其啟動后,每三秒就會在數據庫中插入一條數據了。

?

實驗結束后,別忘了用installutil? /u? services1.exe 的命令卸載掉這個服務哦,或是禁用服務。另外,如果更新了程序代碼重新編譯,有了新的services1.exe,只要路徑沒變,就不需要重新安裝該服務的。

相同的功能完全可以在SQL Server的作業中進行,而且方便快捷,當然windows服務肯定有其他的優勢,本文只是舉個例子,所以不要用這個來板磚我了。

如果是高手,希望能解決Windows服務啟動失敗的報錯問題,當我安裝完畢windows服務以后,再次運行還是報一樣的錯。

轉載于:https://www.cnblogs.com/ligongzi/p/3329820.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/274012.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/274012.shtml
英文地址,請注明出處:http://en.pswp.cn/news/274012.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java 線程多線程編程2---線程同步

來模擬一個死鎖(互相等待): TestDeadLock.java package com.zhj.www;public class TestDeadLock implements Runnable {public int flag 1;static Object o1 new Object();static Object o2 new Object();public void run() {System.out.p…

Java網絡編程1---基礎

TCP/IP:事實上的標準 自己編的應用程序:應用層 TCP/UDP層 IP層 物理層 數據封裝:第五層只與第四層打交道。 數據拆封《TCP/IP詳解》網絡底層 IP巨大的貢獻:提供了獨一無二的IP地址。 內網IP:虛假的 子網掩碼:255.255.2…

Java網絡編程2---Socket-TCP編程

Sockct:插座Socket是關于TCP的。 端口號:兩個字節->65536個端口號,一個應用程序占多個端口號; 但是假設一個應用程序占一個端口號;一臺電腦會有65535個應用程序。 自己編寫程序要占用端口號1024以上后的。 80端口:網…

winform綁定多張圖片

開發winform程序的時候經常設計到要顯示多張圖片的問題,其解決思路一般是先遍歷文件夾中的所有圖片,然后再把這些圖片添加到ImageList控件中,最后再綁定顯示出來。這里我們介紹兩種綁定的方法: (一)動態生成…

Java網絡編程3---Socket-UDP編程

栗子:TestUDPServer.java 服務器端: package com.zhj.www;import java.net.DatagramPacket; import java.net.DatagramSocket;public class TestUDPServer {public static void main(String[] args)throws Exception {byte buf[] new byte[1024];Datagr…

iOS 6 自動布局入門

http://www.raywenderlich.com/zh-hans/22873/ios-6-自動布局-入門-1轉載于:https://www.cnblogs.com/ihojin/p/auto-layout.html

Java GUI 基礎知識

這部分主要包含AWT、組件和容器、布局管理器Component:所有可以和用戶交互的圖形元素,他的子類有:輸入框… Java.awt及其子包 Container:容器,容納其他各種各樣的Component的元素。 Panel:可以容納其他元素…

UVA11300

初步解題原理:代數運算單元素極值 代數運算: xi表示第i個給i-1的數量,正負表示給或得 c(a1a2a3....an)/n a1-x1x2c -->x2x1-a1c a2-x2x3c -->x3x1-a1-a22c a3-x3x4c -->x4x1-a1-a2-a33c ...... an-xnx1c -->xnx1-a1-a2-a3....-a(n-1)(n-1)c ansmax{|x1|…

Java GUI 基礎知識2 監聽機制

TestActionEvent.java沒有調用方法,但是有反應。反應自己要編寫程序有反應。 事件模型:一定要有某些反應。 寫程序,監聽的操作是自動發生的,一直監聽。鉤子函數,(回調函數) 怎么讓它自動執行&am…

求字符串的最長回文字串 O(n)

昨天參加了某公司的校園招聘的筆試題,做得慘不忍睹,其中就有這么一道算法設計題:求一個字符串的最長回文字串。我在ACM校隊選拔賽上遇到過這道題,當時用的后綴數組AC的,但是模板忘了沒寫出代碼來。 回頭我把這道題目再…

數據結構 二、向量(接口與實現and可擴容向量)

ADT操作實例:Disordered:顯示出3對逆序緊鄰對。Vector模板類初始有效空間為0;基于復制的構造描述區間:左閉右開 為什么*2?有限時間內不必要為擴容而打斷。 2、可擴充向量左移一位:加一倍

數據庫:mysql 獲取剛插入行id[轉]

我們在寫數據庫程序的時候,經常會需要獲取某個表中的最大序號數, 一般情況下獲取剛插入的數據的id,使用select max(id) from table 是可以的。但在多線程情況下,就不行了。 下面介紹三種方法 (1) getGeneratedKeys()方法: 程序片斷: Connection conn ; …

svn由于連接方在一段時間后沒有正確答復或連接的主機沒有反應連接嘗試失敗...

解決方法,關掉防火墻, service iptables status 查看iptables狀態 service iptables restart iptables服務重啟 service iptables stop iptables服務禁用 轉載于:https://www.cnblogs.com/jiqing9006/p/3347441.html

Android 服務(Service)

一、服務的解釋 服務(Service)是Android中實現后臺運行的解決方案,它適合那些去執行不需要和用戶交互而且還要求長期運行的任務。服務的運行不依賴任何的與任何用戶界面,即使程序被切換到后臺,或者用戶打開了另外一個應…

CenOS 配置C/C++語言

1.下載eclipseCDT組合包。 2.電腦上安裝GCC, G 3.在eclipse上創建一個C project 4. Eclipse CDT功能很強大,安裝完雖然可以編譯運行c程序,但有個問題,就是找不到c標準庫的頭文件,無法打開諸如之類的文件,編…

(數據結構)前綴,后綴以及中綴表達式

中綴表達式(中綴記法) 中綴表達式是一種通用的算術或邏輯公式表示方法,操作符以中綴形式處于操作數的中間。中綴表達式是人們常用的算術表示方法。 前綴表達式(前綴記法、波蘭式) 前綴表達式是一種沒有括號的算術表…

Moravec角點檢測算子

Moravec角點檢測算子 Moravec 在1981年提出Moravec角點檢測算子[1],并將它應用于立體匹配。 首先, 計算每個像素點的興趣值, 即以該像素點為中心, 取一個w*w(如:5x5)的方形窗口, 計算0度、45度、90度、135度四個方向灰度差的平方和, 取其中的最小值作為該像素點的興…

java習題-練習1

1、 Given the string, check if it is a palindrome.(回文) Example For inputString "aabaa", the output should becheckPalindrome(inputString) true;For inputString "abac", the output should becheckPalindrome(inputSt…

文件夾生成工具

很簡單的一個小工具,輸入一個字符串,可以為你生成相應的文件夾. 至于有什么用?我公司一個策劃拿一頓飯給我要的. 下載地址: http://pan.baidu.com/s/1d0ewl 轉載于:https://www.cnblogs.com/WhyEngine/p/3350053.html

java中System.exit(1)、System.exit(0)、以及return的區別

System.exit(0)是正常退出程序,而System.exit(1)或者說非0表示非正常退出程序System.exit(status)不管status為何值都會退出程序。 和return 相比有以下不同點:return是回到上一層,而System.exit(status)是回到最上層