windows下把 exe 創建成 winservice

怎樣windows下把 exe 創建成 winservice

1.在64位windows下使用instsrv.exe和srvany.exe創建windows服務在32位的windows下,包括windows7,windows xp以及windows 2003,都可以使用instsrv.exe和srvany.exe來創建自定義的windows服務。比如,我們有一個bat文件,用於將指定的程序作爲服務進行啓動,使用一般的工具都不可以進行此類工作,而使用由windows 2003的資源工具包windows toolkit中所帶的instsrv就可以。
詳細的用法這裏就不再具體敘述,簡單一點就是使用instsrv將相應的srvany註冊成服務,然後在註冊表中增加相應的Application和AppDirectory參數,用於srvany啓動我們所相應的服務。如下列代碼所示://將相應程序生成成服務

set s32=%windir%\system32
%s32%\instsrv.exe %service_name% %s32%\srvany.exe

//在註冊表中更新相應的參數
echo Windows Registry Editor Version 5.00> %reg_file%
echo >> %reg_file%
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\%service_name%\Parameters] >> %reg_file%
echo "Application"="%prog_path%\\%prog_name%" >> %reg_file%//程序地址
echo "AppDirectory"="%prog_path%" >> %reg_file%//程序目錄

2.以上的代碼在所有的32位系統之上都可以正常的運行,包括windows 2000。然而,在64位的windows下,以上的代碼卻失效了。會報一個以下錯誤:
Unable to find the file at the given path
在仔細檢查了參數之後,確定這是由於系統原因所引起的。
最終的原因在於,我們所使用的instsrv和srvany是32位的,而windows現在沒有相對應的64位相對應工具發佈。而程序本身是沒有問題的,問題在於我們將instsrv和Srvany放到windows/system32正面,而在64位系統中,這裏應該存放64位的程序,所以最終的解決問題很簡單。我們只需要將這兩個程序再copy至32位程序應該放置的地方,比如windows/sysWow64目錄,這樣就可以了。原先的相應步驟以及程序根本就不需要作任何改動。instsrv會自動地找到原先應該放在system32下的程序,而這個程序現在被放置在了SysWow64目錄下。
簡單一點的解決方法就是,將instsrv和srvany程序在windows/sysWow64目錄下再copy一份,相當於在system32和sysWow64下都有程序,這樣問題即解決。更底層的原因,也許只有微軟能解釋了,簡而言之,在64位系統下,32位程序是看不到放置在system32下面的程序的,而它應該訪問的system32目錄被系統映射到了sysWow64目錄下了,在運行時系統會自動地將相應的sysWow64目錄映射爲程序所認爲的system32。
參考文檔:http://en.wikipedia.org/wiki/WoW64

創建一個MyServiceName.bat

instsrv.exe MyServiceName C:\Windows\SysWOW64\srvany.exe
regedit.exe -y MyServiceName.reg

創建一個MyServiceName.reg

Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MyServiceName\Parameters] 
"Application"="值爲你要作爲服務運行的程序地址"
"AppDirectory"="值爲你要作爲服務運行的程序所在文件夾路徑"
"AppParameters"="值爲你要作爲服務運行的程序啓動所需要的參數"

之後執行MyServiceName.bat
想刪除一個服務怎麼辦?
sc delete MyServiceName

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章