最近在做乙個windows服務實現windows socket server讀取系統硬體,rfid的內容給web**使用。在測試過程中,發現rfid讀取過程有時會導致服務無端中止。因為涉及到硬體呼叫,查不到具體的原因。所以就簡單的處理,做乙個程序守護,當windows的服務程序退出之後,自動重新開啟。以前使用的方法是,另外做乙個程式監測。因為那種方法比較麻煩,現在介紹一種更簡單的方法。使用cmd使用。
@echo off
rem 定義迴圈間隔時間和監測的服務:
set secs=60
set srvname="服務名稱"
echo.
echo ****************************************
echo == 查詢計算機服務的狀態, ==
echo == 每間隔%secs%秒種進行一次查詢, ==
echo == 如發現其停止,則立即啟動。 ==
echo ****************************************
echo.
echo 此指令碼監測的服務是:%srvname%
echo.
if %srvname%. == . goto end
:chkit
set svrst=0
for /f "tokens=1* delims= " %%a in ('net start') do if /i "%%a %%b" == %srvname% set svrst=1
if %svrst% == 0 net start %srvname%
set svrst=
rem 下面的命令用於延時,否則可能會導致cpu單個核心滿載。
ping -n %secs% 127.0.0.1 > nul
goto chkit
:end
雙擊該批處理檔案,執行介面如下
****************************************
== 查詢計算機服務的狀態, ==
== 每間隔%secs%秒種進行一次查詢, ==
== 如發現其停止,則立即啟動。 ==
****************************************
此指令碼監測的服務是:%srvname%
如果%srvname%停止後,該批處理檢測到後會重啟該服務,介面如下
****************************************
== 查詢計算機服務的狀態, ==
== 每間隔%secs%秒種進行一次查詢, ==
== 如發現其停止,則立即啟動。 ==
****************************************
此指令碼監測的服務是:%srvname%
%srvname% 服務正在啟動
%srvname% 服務已經啟動成功。
按實際情況修改
set srvname="服務名稱"
這裡的服務名稱。
把檔案儲存到服務的安裝資料夾。
/// /// 啟動服務
///
///
protected override void onstart(string args)
system.timers.timer timer = new system.timers.timer();
/// /// 啟動定時器
///
private void starttimer()
///執行的
void timer_elapsed(object sender, system.timers.elapsedeventargs e)
else
//如果沒執行命令,執行cmd監聽。
if (!execdcmd)
}private bool execdcmd = false;
private void execcmd()
catch (exception ex)
,", ex.message, ex.stacktrace.tostring());
}}
c 寫windows服務程式
view plaincopy to clipboardprint?在很多應用中需要做windows服務來運算元據庫等操作,比如 1 一些非常慢的資料庫操作,不想一次性去做,想慢慢的通過服務定時去做,比如定時為資料庫備份等 2 在.net remoting中利用windows服務來做host 利用vs...
windows 下 寫守護程序
1.延時 延時40秒我就知道 ping n 40 127.0.0.1 nul 參考思路1 利用 time 變數,死迴圈來判斷。優點 準確 缺點 消耗cpu相當的高 思路2 利用 ping 127.0.0.1 n 2 死迴圈延遲,迴圈一次加1,自己計算需要的數值,優點 不會太消耗系統資源 缺點 準確度...
自寫Windows服務的安裝步驟
自寫windows服務的安裝步驟 程式概覽 最近有乙個將redis儲存的資料定期寫入資料庫的需求,經過查詢資料,決定寫乙個windows service,使用定時器定期對redis資料庫進行鍵值遍歷,並將每乙個hash值作為資料庫表的乙個記錄,存入資料庫表中。這樣可以不用每次使用某個模組都會去訪問資...