1. 程式人生 > >[Windows] 如何將應用程式註冊為系統服務

[Windows] 如何將應用程式註冊為系統服務

將任何應用程式註冊成後臺服務程式,即:系統啟動後該程式可以自動啟動,並且在前臺不要出現執行視窗。

解決辦法:需要使用Windows提供的兩個工具instsrv.exe和srvany.exe。(Windows 2003資源工具包帶有)

  • instsrv:把win32程式變成系統服務。
  • srvany:將一個應用程式註冊為一個服務。即註冊一個系統服務,來啟動要執行的應用程式。

基本用法:

  • instsrv  [服務名]  [應用程式絕對路徑]  (增加服務)
  • instsrv  [服務名]  REMOVE  (刪除服務)
  • instsrv  [服務名]  [srvany的絕對路徑]

一、應用程式具有服務功能(能響應服務控制檯的查詢請求)

使用instsrv.exe,指令格式:instsrv [服務名] [應用程式路徑]
執行完成後,在登錄檔項“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\”中自動增加項[服務名],並在其下成功新增各個鍵值:

“DisplayName”   =服務顯示名     (字串值)
“Description”   =服務描述       (字串值)
“ImagePath”     =應用程式路徑   (可擴充字串值)
“ObjectName”    =”LocalSystem”  (字串值)
“Type”          =10(16進位制)     (dword值)
“Start”         =2(16進位制)      (dword值)
“ErrorControl”  =1(16進位制)      (dword值)

如果不使用instsrv.exe,同樣可以在登錄檔中手工新增實現:在“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\”下新建一個項,項名為要顯示的服務名,並在其下新建以上各個鍵,填入鍵值。

這樣,一個服務就增加成功了,執行services.msc在服務管理器中可以看到,重啟電腦就會自動啟動服務。

二、應用程式不具有服務功能(不能響應服務控制檯的查詢請求)

並不是所有程式都適合做系統服務,即便註冊成系統服務後也是無法啟動,這時就需要用到srvany.exe。

具體步驟如下:

  1. 註冊服務:  path\instsrv  [服務名]  path\srvany.exe (同樣第一種情況,把[應用程式路徑]換為[srvany路徑]。)
  2. 執行regedit開啟登錄檔,進入HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\[服務名]
  3. 新建一個項,項名為Parameters,在項Parameters下新建如下建值:
  4. 右鍵-新建-字串值Application,值資料填入[應用程式絕對路徑],如:D:\RuijieSupport\MentoHUST\MentoHUST.exe
  5. 右鍵-新建-字串值AppDirectory,值資料填入[應用程式工作目錄],如:  D:\RuijieSupport\MentoHUST\
  6. 執行services.msc開啟服務管理,找到剛新增的服務,在屬性-登入中,勾選“允許服務與桌面互動”。
  7. 啟動服務。

說明:

  1. 執行instsrv命令如果出現出錯提示:- The fully qualified path to the .EXE must be given。則說明需要寫完整的路徑,並最好用引號包含。如:C:\Program Files\Windows Resource Kits\Tools> instsrv MentoHUST “C:\Program Files\Windows Resource Kits\Tools\srvany.exe”
  2. 在Parameters裡還可以新增很多鍵值:
    AppDirectory  工作目錄
    AppParameters  你的應用程式的引數。
    AppEnvironment  執行環境變數。

三、以上方法同樣可以採用inf檔案實現。

inf檔案格式:

增加一個服務:

[Version]
Signature=”$WINDOWS NT$”
[DefaultInstall.Services]
AddService=MentoHUST,,My_AddService_Name
[My_AddService_Name]
DisplayName=MentoHUST Replace Ruijie
Description=銳捷替代
ServiceType=0×10
StartType=2
ErrorControl=0
ServiceBinary=%11%\MentoHUST.exe

刪除一個服務:

[Version]
Signature=”$WINDOWS NT$”
[DefaultInstall.Services]
DelService=MentoHUST

增加服務的inf檔案建立後,儲存,並執行命令:
rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 path\inf檔名
執行完成後,同樣會看到:在登錄檔中看到新增的服務項MentoHUST和鍵值,在服務管理器會看到新增的服務MentoHUST。

遇到不具有服務功能的應用程式,還是要開啟登錄檔,接著上述操作,在建立的服務項下新建項Parameters,並新增鍵值。

說明:

  1. ServiceType 服務型別:0×10為獨立程序服務,0×20為共享程序服務(比如svchost);
  2. StartType 啟動型別:0 系統引導時載入,1 OS初始化時載入,2 由SCM(服務控制管理器)自動啟動,3 手動啟動,4 禁用。(注意,0和1只能用於驅動程式)
  3. ErrorControl 錯誤控制:0 忽略,1 繼續並警告,2 切換到LastKnownGood的設定,3 藍屏。
  4. ServiceBinary 服務程式位置:%11%表示system32目錄,%10%表示系統目錄(WINNT或Windows),%12%為驅動目錄system32\drivers。也可以不用變數,直接使用全路徑。
  5. 服務名MentoHUST後面有兩個逗號,因為中間省略了一個不常用的引數flags。
  6. Description、ServiceType、StartType、ErrorControl四項是必須要有的,還有LoadOrderGroup、Dependencies等就不做詳述了。

使用inf檔案的優勢:

  1. 和用SC等工具一樣,inf檔案的效果是即時起效的,而匯入reg後必須重啟才有效。
  2. 匯出一個系統自帶服務的登錄檔項,如果資料型別是REG_EXPAND_SZ,會看到一堆16進位制程式碼,可讀性很差。手動匯入登錄檔以增加服務時,這樣定義ImagePath顯然很不方便,而用REG_SZ代替又會有些問題,比如不能用環境變數。用inf檔案完全沒有這個問題,ServiceBinary(即ImagePath)自動成為REG_EXPAND_SZ。
  3. inf檔案會自動為服務的登錄檔項新增一個Security子鍵,使它看起來更像系統自帶的服務。
  4. AddService和DelService以及AddReg、DelReg可以同時且重複使用。即可以同時增加和刪除多個服務和登錄檔項。

四、通過修改登錄檔來新增服務: 

在登錄檔編輯器,展開分支"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" ,在右側窗格中顯示的就是本機安裝的服務項。如果要新建服務,只須點選"編輯→新建→項" ,然後為此項命名,如"test";然後右擊該項,選擇"新建→字串值"或"新建→Dword值"即可。新增一個服務專案具體需要新增的鍵值如下: 
"DisplayName",字串值,對應服務名稱; 
"Description",字串值,對應服務描述; 
"ImagePath",字串值,對應該服務程式所在的路徑;
"ObjectName",字串值,值為"LocalSystem",表示本地登入;
"ErrorControl",Dword值,值為"1"; 
"Start",Dword值,值為2表示自動執行,值為3表示手動執行,值為4表示禁止; 
"Type",Dword值,應用程式對應10,其它對應20。 
  另外,還要在"test"項下新建一個"Enum"項。如果有些必須通過srvany來載入的還必須新增另外的Parameters子項在該項中提供詳細的要加為服務的程式所在的路徑。而上面的那個路徑就需要指到srvany所在的路徑。 

附:Windows 2003資源工具包 下載地址

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=9d467a69-57ff-4ae7-96ee-b18c4790cffd&DisplayLang=en

相關推薦

[Windows] 如何應用程式註冊系統服務

將任何應用程式註冊成後臺服務程式,即:系統啟動後該程式可以自動啟動,並且在前臺不要出現執行視窗。 解決辦法:需要使用Windows提供的兩個工具instsrv.exe和srvany.exe。(Windows 2003資源工具包帶有) instsrv:把win32程式變成系

windows安裝redis,並註冊系統服務

windows安裝redis 剛開始學習redis,先從搭建環境開始吧,這裡只是記錄一下,以免自己忘記了。 一、下載Redis 由於Redis 沒有官方的Windows版本,只有linux版本的,官方下載地址: https://github

WindowsTomcat8註冊系統服務並設定開啟後臺啟動

1、下載解壓版本的Tomcat 我的是apache-tomcat-8.0.51,直接解壓即可,不需要設定環境變  2、修改/bin檔案下的檔案 service.bat、startup.bat、shutdown.bat三個檔案使用編輯器開啟 分別在檔案最開始(@echo

普通應用程式新增到系統服務 windows server2003

http://blog.csdn.net/lisq037/article/details/12496091  windows 新增應用程式到服務注意:sc create 服務名 binpath= "路徑"  (binpath= 和其它引數的"="後面一定要有一個空格)如

Tomcat註冊系統服務教程(WIN10)

轉載請註明出處 https://mp.csdn.net/mdeditor/83997278# 前言 有一種想法,在WIN10下可不可以讓我們的Tomcat後臺開機自動執行呢?答案是可以的! 本文將介紹如何將Tomcatt註冊為系統服務的步驟; Tomcat的基本配置以及多

如何Tomcat註冊系統服務

D:\lms\apache-tomcat-9.0.0.M10\bin>service.bat install tomcatService9 Installing the service 'tomcatService9' ... Using CATALINA_HOME:    "D:\lms\apache

什麼時候應該應用程式切分多個容器?

圍繞著應該將應用程式的哪些部分切分為多個容器以及為什麼要這樣做,存在著很多困惑。我最近對Docker使用者郵箱列表的迴應促成了今天的文章。在這篇文章中我打算評估一個映象化的Java應用程式,它歷史上曾經執行在一個單一的Tomcat伺服器裡,並解釋為什麼我會把它切分為獨立的容器。為了讓事情有趣

Java Service Wrapper Java程式部署成系統服務

在使用Java開發應用程式時,我們通常會打包成Jar包獨立執行,但是在實際生產環境中,伺服器重啟或出現異常時,程式往往不能重啟或隨伺服器開機啟動,所以我們可以採用Java Service Wrapper工具解決這一問題,Wrapper可以將我們的Java程式包裝成系統服務,這樣就可以隨著系統

jar檔案安裝系統服務

最近做了一個專案要將開發好的專案打成jar包並安裝成為系統服務執行,網上找過好多文章 但是不是全面 細節的地方好多沒有闡述, 經過一番努力 系統服務安裝成功,記錄下,方便以後查閱 一、首先要將自己開發好的java專案打成jar包,不是我們平時打的只有class檔案jar,

Tomcat註冊系統服務

1. 在DOS命令列模式下,cd到tomcat的bin目錄下。命令參考:d:          cd bin       dir      2.在tomcat的bin目錄下可以看到有一個service.bat的批處理檔案,tomcat註冊成系統服務所用。 3.執行命令se

如何應用程式exe註冊服務,直接從後臺執行

方法一:使用windows自帶的命令sc      使用sc create 方法建立。      如:sc create CaptureScreen binpath= "F:\zwmei-project\decklink-learning\OutputBitmap\Deb

解決win-server 2008R2 安裝 Materials 出現 Windows Install Coordinator “應用程式正在首次安裝做準備”

參考 http://muchong.com/bbs/url.php?s=aHR0cHM6Ly93d3cuYnRlcnJlbGwuY29tL0Jsb2cvYmlkLzEwNDg1My9SZXNvbHZpbmctV2luZG93cy1JbnN0YWxsZXItQ29vcmRpbmF0b3Itb24tVGVybWl

Linux下tomcat註冊系統服務

編寫啟動指令碼 vi /etc/rc.d/init.d/tomcat  //需將JAVA_HOME和CAGTALANA_HOME替換成自己的jdk安裝目錄和tomcat安裝目錄 #!/bin/bash # # tomcat startup script for

【Linux】新增web應用(jar包)系統服務

      為了可以將jar包新增成Linux的系統服務,需要做以下幾樣準備:       ①啟動指令碼start.sh #!/bin/bash export JAVA_HOME=/usr/local/jdk1.8.0_171

應用程式新增到gnome3的全域性選單中(並支援修改預設程式

在gnome3中,如果將滑鼠移動到左上角,就會出現一個程式選單,類似於win8中的start介面,在這裡直接鍵入英文就可以快速索引程式,十分方便。不過像deadbeef(筆者喜歡的一個輕量級音樂播放器)這種從網上獲取的可執行檔案無法作為程式出現在gnome3的程式選單中,而

如何TOMCAT註冊系統服務

將TOMCAT註冊成系統服務的好處,就是方便維護,在伺服器重啟的時候,系統會自動啟動系統服務,而不必手動操作,這就為我們在專案維護時省下不少麻煩。 在專案維護期間有很多客戶只要一有問題,就電話招呼,而且是一召喚就得立馬出現,如果手上運維的專案比較多的話,那就會很蛋疼了。將T

windows下配置Tomcat系統服務

1. 下載解壓版的Tomcat,解壓到自己知道的目錄下,startup.bat  shutdown.bat   service.bat等檔案都在tomcat的bin目錄下2. 修改startup.bat檔案:    在第一行前面加入下面的語句:    SET JAVA_HOM

利用WindowsServiceWrapper(WinSW)nginx包裝系統服務

只需要 配置 ice rip utf-8 http 下載 release -c 1、WindowsServiceWrapper(WinSW) Github:https://github.com/kohsuke/winsw/ 下載地址:http://repo.jenkins-

C#--第11周實驗--任務1(建立Windows窗體應用程式)--設計一個窗體--單擊按鈕時,在標籤上顯示當前系統時間 .

/* (程式頭部註釋開始)    * 程式的版權和版本宣告部分    * Copyright (c) 2011, 煙臺大學計算機學院學生     * All rights reserved.    * 檔名稱:設計一個窗體   * 版 本 號: V1.0     * 對任務

用Visual Studio應用程式部署到Windows Azure平臺

微軟給開發人員三種方式將應用程式部署到Windows Azure平臺上: 1)通過Windows Azure管理介面上傳應用。具體的請參考 2)通過PowerlShell部署Windows Azure應用程式,具體的的請參考微軟MSDN文章: 3)通過Visual Studio部署應用程式到Windo