使用srvany.exe將程式安裝成windows服務的詳細教程

來源:互聯網
上載者:User

srvany.exe介紹

srvany.exe是Microsoft Windows Resource Kits工具集的一個實用的小工具,用於將任何EXE程式作為Windows服務運行。也就是說srvany只是其註冊程式的服務外殼,這個特性對於我們 來說非常實用,我們可以通過它讓我們的程式以SYSTEM賬戶啟動,或者實現隨機器啟動而自啟動,也可以隱藏不必要的視窗,比如說控制台視窗等等。

資源下載

你可以通過下載並安裝Microsoft Windows Resource Kits 獲得或者直接在本文下載。

樣本中的控制台程式僅僅是向當前路徑不停的寫入時間。

srvany 打包下載地址 測試程式,測試程式(含控制台項目)

如何使用

當你擷取到srvany後並決定將某程式作為服務啟動後,請先將srvany安裝為系統服務,具體的安裝方法有很多,這裡使用instsrv,文法如下:

安裝 instsrv ServiceName C:WindowsSystem32srvany.exe
卸載 instsrv ServiceName remove

(ServiceName 即你自己定義的服務名稱,可以是要作為系統服務啟動的應用程式的名稱。)

安 裝完畢後,我們需要對srvany.exe進行配置,以便於能夠載入我們指定的程式,配置的方法是,開始 - 運行 - regedit,開啟註冊表,定位到下面的路徑。HKEY_LOCAL_MACHINESYSTEMCurrentControlSet ServicesServiceName
如果該服務名下沒有Parameters項目,則對服務名稱項目右擊建立項,名稱為Parameters,然後定位到Parameters項,建立以下幾個字串值。

名稱 Application 值為你要作為服務啟動並執行程式地址。
名稱 AppDirectory 值為你要作為服務啟動並執行程式所在檔案夾路徑。
名稱 AppParameters 值為你要作為服務啟動並執行程式啟動所需要的參數。

比如這裡是個配置執行個體,我們這裡配置的服務名稱是MyService,下面是MyService的安裝配置情況:



至此,MyService已經安裝成windows服務了,在Window服務項中即可查看。

 本文當然不會僅僅是照搬文章,最近在學習批處理,將其中的操作使用批處理來完成。

批處理說明

  1. run-install.bat 封裝了安裝服務的操作(上面有提到)。需要傳入參數有服務名稱,程式名稱。

 

複製代碼代碼如下:
@echo off
rem 參數依次為 服務名稱 可執行檔名稱
@echo 服務名稱:%1
@echo 程式名稱:%2</p> <p>rem 定義需要啟動並執行程式路徑
set curExe=%~dp0%2
rem 定義註冊表路徑
set regpath=HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesMyServiceParameters
rem 定義srvany.exe檔案路徑
set sourcePath=%~dp0srvany.exe</p> <p>rem 進入目前的目錄
cd /d "%~dp0"
rem 安裝引導服務
instsrv %1 "%sourcePath%"
@echo 服務添加完成</p> <p>rem 添加註冊表文法: reg add 註冊表路徑 /v 項名稱 /t 實值型別 /d 資料 /f 表示強行修改不提示</p> <p>rem 名稱 Application 值為你要作為服務啟動並執行程式地址 /d對應的參數有斜杠不是為了轉義引號,而是路徑還有斜杠,預設將引號轉義了,額外添加斜杠是為了保留引號
reg add %regpath% /v AppDirectory /t REG_SZ /d "%~dp0" /f</p> <p>rem 名稱 AppDirectory 值為你要作為服務啟動並執行程式所在檔案夾路徑
reg add %regpath% /v Application /t REG_SZ /d "%curExe%" /f </p> <p>rem 名稱 AppParameters 值為你要作為服務啟動並執行程式啟動所需要的參數
reg add %regpath% /v AppParameters /t REG_SZ /f
@echo 註冊表添加完成

2.install.bat 命令含義:進入目前的目錄,調用目前的目錄下的run-install.bat檔案,並傳入參數,完成服務安裝。服務名:MyService 執行程式:Console.exe

 

複製代碼代碼如下:
@echo off
cd /d %~dp0
call run-install.bat MyService Console.exe
pause

3.run-del.bat 簡單封裝了卸載服務的操作,傳入服務名稱即可。

 

複製代碼代碼如下:
@echo off
rem 參數依次為 服務名稱
@echo 服務名稱:%1</p> <p>rem 進入目前的目錄
cd /d %~dp0
rem 卸載引導服務
instsrv %1 remove

4.del.bat 命令含義:進入目前的目錄,調用目前的目錄下的run-del.bat檔案,並傳入參數,完成服務卸載。服務名:MyService

 

複製代碼代碼如下:
@echo off
cd /d %~dp0
call run-del.bat MyService
pause

總結

  1.按照以上操作即可輕鬆將程式添加到系統服務中去。
2.使用情境為,該程式需要開機啟動,而且是在Window未登入的情況下。(常規的開機啟動應用程式需要輸入機器使用者名稱、密碼進入到案頭後才啟動)
3.將程式部署成服務後,該程式依然可以雙擊啟動,如果不需要,建議將程式中添加命令列參數判斷來禁止雙擊啟動該程式。
4.在服務的屬性中,可以設定其與案頭進行互動,此時Window會提示互動式訊息提示,點擊後即可顯示程式表單。
   5.如果你的程式是做成安裝包,調用安裝服務的批處理和調用卸載服務的批處理,則可以放在安裝程式和卸載程式的時候去執行,簡化使用者操作。

相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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