NSSM是類似於Srvany和Cygrunsrv的服務助手程序。它可以啟動任何應用程序(例如控制台)作為NT服務,如果由於任何原因失敗,它將重新啟動該服務。
NSSM還具有圖形服務安裝程序和刪除劑。
這是NSSM的叉子
您可以在此處發行中找到二進製文件
原始代碼:https://git.nssm.cc/nssm/nssm by iain Patterson
文檔:用法,命令
在下面的用法註釋中,該程序的論點可以用角括號和/或方括號編寫。表示您必須插入適當的字符串,並且表示字符串是可選的。請參閱下面的示例...
請注意,到處出現您可以替換服務的顯示名稱。
要安裝服務,請運行
nssm install <servicename>
將提示您輸入要運行的應用程序的完整路徑,並進入任何命令行選項,以傳遞到該應用程序。
使用System Service Manager(Services.MSC)控制高級服務屬性,例如啟動方法和桌面交互。 NSSM可能會在以後支持這些選項...
要安裝服務,請運行
nssm install <servicename> <application> [<options>]
然後,NSSM將嘗試安裝使用給定選項運行命名應用程序的服務(如果指定任何選項)。
如果包含空間,請不要忘記將路徑封閉在“引號”中!
如果您想在選項中包含引號,則需要“”“ Quote”“引號。
當您發送啟動信號時,NSSM將啟動註冊表中列出的應用程序,並在發送停止信號時終止它。到目前為止,非常像Srvany。但是NSSM是非吸毒服務經理,如果應用程序死亡,可以採取行動。
如果您注意到應用程序死亡,但您沒有將其發送給停止信號,則NSSM將嘗試重新啟動自身。 NSSM將繼續嘗試,在每次嘗試之間暫停,直到成功啟動該服務或向其發送停止信號。
如果服務未能及時開始,最多可達四分鐘,則NSSM將在隨後的重新啟動嘗試之間暫停越來越長的時間。因此,它不會消耗過多的CPU時間,試圖一遍又一遍地啟動失敗的應用程序。如果您確定了失敗的原因,並且不想等待,則可以使用Windows Service Console(將在暫停狀態顯示服務)將繼續信號發送給NSSM,並且它將在幾秒鐘內重試。
默認情況下,NSSM將“及時的方式”定義為在1500毫秒內。您可以通過將毫秒的數量設置為hklm system currentControlset services <服務> parameters appthrottle中的註冊表中的reg_dword值來更改服務的閾值。
另外,NSSM可以在嘗試重新啟動應用程序之前暫停可配置的時間,即使該應用程序在AppThrottle指定的時間量中成功運行。 NSSM將在HKLM System CurrentControlset Services <Service> parameters AssentArtDelay上查閱REG_DWORD值,以獲取在嘗試重新啟動之前等待的毫秒數。如果設置了AscrantArtDelay並確定應用程序要進行節流,則NSSM將暫停該服務,而該服務的更長是已配置的重新啟動延遲和計算得出的油門週期。
如果AverestartDelay缺少或無效,則僅應用節流。
NSSM將在HKLM System currentControlset Services <服務> parameters appExit下查看註冊表中的字符串(reg_expand_sz)值,與應用程序的退出代碼相對應。例如,如果使用代碼1退出的應用程序將在Appexit下尋找一個名為“ 1”的字符串值,或者,如果沒有找到它,則將返回到AppExit(默認)值。您可以通過諮詢系統事件日誌來找出應用程序的退出代碼。應用程序退出時,NSSM將記錄退出代碼。
根據註冊表中發現的數據,NSSM將採取三個動作之一:
如果值數據為“重新啟動”,則NSSM將嘗試按照上述重新啟動應用程序。這是其默認行為。
如果值數據為“忽略”,則NSSM不會嘗試重新啟動應用程序,但會繼續運行自身。這模仿了斯里瓦尼的(通常是不受歡迎的)行為。 Windows Services Console即使已退出了該應用程序,也將顯示該服務仍在運行。
如果值數據為“退出”,則NSSM將優雅地退出。 Windows Services Console將顯示該服務如停止。如果您希望提供對服務恢復的較細粒度控制,則應使用此代碼並手動編輯故障操作。請注意,Vista之前的Windows版本不會將這種出口視為故障。在較舊版本的Windows上,您應該使用“自殺”。
如果價值數據是“自殺”,則NSSM將在不通知服務經理的情況下模擬崩潰並退出。此選項僅適用於您希望採用服務恢復措施的vista Pre-Vista系統。請注意,如果受監視的應用程序使用代碼0退出,則只有在明確配置出口代碼0的註冊表密鑰時,NSSM才會尊重自殺請求。如果只有將默認操作設置為自殺NSSM,則會優雅地退出。
NSSM可以設置託管應用程序的優先類。 NSSM將在HKLM System CurrentControlset Services <服務> 參數下查看註冊表中的REG_DWORD輸入AppPriority。有效值對應於SetPriorityClass()的參數。如果缺少AppPriority()或無效的應用程序將以正常的優先級啟動。
NSSM可以設置託管應用程序的CPU親和力。 NSSM將在HKLM System CurrentControlset Services <服務> 參數下查看註冊表中的註冊表。它應指定零索引處理器ID的逗號分隔列表。可以選擇使用儀表板指定一系列處理器。字符串中不允許其他字符。
例如,指定第一個;第二;第三和第五CPU,適當的Appaftility將為0-2,4。
如果AppAftigation丟失或無效,NSSM將不會嘗試將應用程序限制為特定的CPU。
請注意,NSSM的64位版本可以以這種方式配置64個CPU,並且即使在64位窗口運行時,32位版本也可以配置32 CPU的最大值。
停止服務時,NSSM將嘗試幾種不同的方法來殺死受監視的應用程序,每種應用都可以在必要時禁用。
首先,NSSM將嘗試生成Control-C事件並將其發送到應用程序的控制台。批處理腳本或控制台應用程序可能會攔截事件並優雅地關閉自己。 GUI應用程序沒有控制台,也不會響應此方法。
其次,NSSM將列舉應用程序創建的所有窗口,並向他們發送WM_Close消息,要求優美的出口。
第三,NSSM將枚舉應用程序創建的所有線程,並向它們發送WM_QUIT消息,要求優美的出口。並非所有應用程序的線程都有消息隊列;那些不會對此方法響應的人。
最後,NSSM將調用TerminateProcess()要求操作系統強行終止應用程序。終止程序()不能被困或忽略,因此在大多數情況下,申請將被殺死。但是,不能保證它將有機會在退出之前執行任何整理操作。
上面的任何或全部方法都可以禁用。 NSSM將尋找HKLM System CurrentControlset Services <Services <Service> parameters appStopmethodskip註冊表值,該值應為類型reg_dword設置為type typer toge indit fort,描述不應應用哪些方法。
如果AppStopMethodsKip包含1個,則不會生成Control-C事件。如果AppStopmethodskip包含2個,則不會發布WM_Close消息。如果AppStopmethodskip包含4個,則不會發布WM_QUIT消息。如果AppStopmethodskip包括8,則不會調用terminateProcess()。
例如,如果您知道應用程序沒有響應Control-C事件並且沒有線程消息隊列,則可以將AppStopmethodskip設置為5,而NSSM不會嘗試使用這些方法來停止應用程序。
在AppStopmethodskip的價值中包括8個時,請格外小心。如果NSSM未調用terminateProcess(),則可能在服務停止時不會退出。
默認情況下,NSSM將允許進程1500ms響應上述每種方法,然後再進行下一個方法。可以通過在HKLM System CurrentControlset Services <Service> parameters中在註冊表中創建REG_DWORD條目來以每方法為基礎配置超時。
AppStopmethodconsole AppStopmethodwindow AppStopmethodthreads
每個值應設置為要等待的毫秒數。請注意,超時適用於應用程序過程樹中的每個過程,因此,如果應用程序催生了多個子過程,則實際關閉時間可能比所有已配置的超時的總和更長。
要跳過將上述停止方法應用於應用程序過程樹中的所有進程,將它們僅應用於原始應用程序過程,請設置HKLM System currentControlset Services Services <Service <Service> parameters appKillProcesstree註冊表值,該值應該是REG_DWORD類型,為0。
默認情況下,NSSM將創建一個控制台窗口,以便能夠讀取用戶輸入的應用程序可以做到這一點 - 視允許服務與桌面交互的服務。
可以通過將整數(reg_dword)HKLM System CurrentControlset Services <服務> parameters AppNoconsole註冊表值設置為1來抑制控制台的創建。
NSSM可以將託管應用程序的I/O重定向到由CreateFile()打開的任何路徑。例如,這可以捕獲應用程序的日誌輸出,否則該應用程序只能寫入控制台或接受串行端口的輸入。
NSSM將在HKLM System CurrentControlset Services <服務> 參數下查看註冊表,用於與createFile()參數相對應的鍵。所有都是可選的。如果沒有針對特定流的路徑,則不會重定向。如果給出了路徑,但是省略了其他任何值,它們將被收到明智的默認值。
Appstdin:接收輸入的路徑。 AppStdout:接收輸出的路徑。 AppStderr:接收錯誤輸出的路徑。
CreateFile()的參數提供了“ AppStdinShareMode”,“ AppStdinCreationDisposition”和“ AppStdinflagSandAttributes”值(以及STDOUT和STDERR)。
通常,如果您希望該服務將其輸出記錄,請將AppStdout和AppStderr設置為相同的路徑,例如C: Users public public service.log,它應該起作用。但是,請記住,運行服務的用戶必須訪問該路徑。
使用I/O重定向時,NSSM可以在打開Stdout和/或stderr之前旋轉現有的輸出文件。現有文件將根據文件的最後一個寫入時間重命名為後綴,以毫秒精度。例如,文件nssm.log可以旋轉到NSSM-20131221T113939.457.log。
NSSM將在HKLM System CurrentControlset Services <服務> 參數下查看註冊表中的REG_DWORD條目,以控制旋轉方式。
如果缺少批准文件或設置為0,則禁用旋轉。任何非零值都可以旋轉。
如果批准歐元為非零,則如果文件的最後一個寫入時間小於過去的秒數,則不會旋轉文件。
如果批准BOINS不零,則如果文件小於給定的字節數小,則不會旋轉文件。可以通過設置批准Bythigh的非零值來處理64位文件尺寸。
如果批准的ELARY為非零,則旋轉後給定數量的毫秒數將暫停NSSM。
如果AppStDoutCopyAndTruncate或AppStderrcopyantruncate不為零,則將通過首先獲取文件的副本,然後將原始文件截斷為零大小來旋轉stdout(或stderr)文件。這允許NSSM旋轉通過其他過程打開的文件,從而阻止通常的MoveFile()成功。請注意,如果文件大,複製過程可能需要一些時間,並且暫時消耗的磁盤空間是原始文件的兩倍。還要注意,讀取日誌文件的應用程序可能不會注意到文件大小更改。在這種情況下,將此選項與批准的Eljunction結合使用可能會有所幫助。
旋轉獨立於用於打開文件的CreateFile()參數。無論NSSM是否會附加或更換它們,它們都會旋轉它們。
NSSM還可以旋轉在服務運行時擊中配置大小閾值的文件。此外,您可以通過運行命令來觸發按需旋轉
nssm rotate <servicename>
在從託管應用程序中讀取下一條數據之後,就會發生按需旋轉,而不管批准的價值如何。請注意,如果應用程序不是特別冗長,則可能在一段時間內不會發生旋轉。
要啟用在線和按需旋轉,請將批准條件設置為非零值。
請注意,在線旋轉需要NSSM攔截應用程序的I/O並代表其創建輸出文件。這比在啟動應用程序之前簡單地重定向I/O流更為複雜和容易出錯。因此,默認情況下不啟用在線旋轉。
當重定向輸出時,NSSM可以將每行輸出線以毫秒的時間戳前綴:例如:
2016-09-06 10:17:09.451 Pipeline main started
要啟用時間戳前綴,請將AppTimestAmplog設置為非零值。
前綴適用於Stdout和Stderr。前綴需要以與在線旋轉相同的方式攔截應用I/O。如果啟用了日誌旋轉和時間戳前綴,則旋轉將在線。
NSSM可以替換或附加到託管應用程序的環境中。在HKLM System CurrentControlset Services <Service <Service> parameters中識別了兩個多值字符串(REG_MULTI_SZ)註冊表值。
Appenvironment定義了環境變量列表,這些變量將覆蓋服務的環境。 AppenVironmentExtra定義了環境變量列表,這些變量將添加到服務的環境中。
列表中的每個條目應為“鍵=值”。可以省略該值,但=符號是強制性的。
Appenvironment和AppenvironmentExtra中列出的環境變量均經過正常的擴展,因此,例如,可以通過設置“路徑= C: bin;%路徑%”在AppenVironmentExtra中更新系統路徑。變量按照出現的順序進行擴展,因此,如果要在另一個變量中包含一個變量的值,則應首先聲明依賴關係。
由於Appenvironment中定義的變量覆蓋了現有環境,因此無法參考以前定義的任何變量。
例如,以下Appenvironment塊:
PATH=C:WindowsSystem32;C:Windows
PATH=C:bin;%PATH%
如預期,將導致“ C: bin; c: windows system32; c: windows”的路徑。
而以下Appenvironment塊:
PATH=C:bin;%PATH%
將導致僅包含C: bin的路徑,並可能導致應用程序無法啟動。
大多數人都希望專門使用AppenVironmentExtra。 Srvany僅支持Appenvinment。
從2.25版開始,NSSM解析了Appenvironment和AppenvironmentExtra本身,然後才能閱讀任何其他註冊表值。結果,現在可以參考應用程序,AppDirectory和其他參數中的自定義環境變量。
所有Windows服務都可以通過創建一個名為HLKM System currentControlset Services <Service <Service> Environal來傳遞其他環境變量。
在服務啟動之前,該環境塊的內容將合併到系統環境中。
但是,請注意,在處理之前,合併的環境將按字母順序排序。這意味著在實踐中,您無法在環境塊中設置dir =%programFiles%,因為傳遞給服務的環境將在定義%dir%的情況下定義%programfiles%。 AppenvironmentExtra中定義的環境變量不會受到此限制。
從2.25版開始,NSSM可以使用類似的命令獲取並設置環境塊:
nssm get <servicename> Environment
值得重申的是,環境塊可用於所有Windows服務,而不僅僅是NSSM服務。
環境NSSM傳遞到應用程序取決於如何配置各種註冊表值。以下流程描述了環境如何修改。
默認情況下:該服務繼承了系統環境。
如果定義了環境:環境的內容已合併到環境中。
如果定義了參數 appenvironment:該服務繼承了Appenvironment中指定的環境。
如果 parameters appenvironmentExtra被定義:AppenvironmentExtra的內容被附加到環境中。
請注意,Appenvirnment覆蓋了系統環境和合併環境塊。還要注意,如果定義了AppenVironmentExtra,則保證將其附加到啟動環境中。
NSSM可以對應用程序事件運行用戶可配置命令。這些命令稱為下面的“鉤子”。
所有鉤子都是可選的。運行的任何鉤子都將使用為服務配置的環境啟動。 NSSM將將其他變量放入環境中,可以查詢這些變量以了解如何和原因。
掛鉤按事件和動作進行分類。有些鉤子同步運行,有些鉤子不同步。帶有 *星號前綴的鉤子同步運行。 NSSM將等待這些鉤子完成,然後再繼續其工作。但是,請注意,所有鉤子都會在截止日期之前殺死它們,無論它們是否異步運行。
事件:開始 - 當要求開始服務時觸發。 *操作:在NSSM嘗試啟動應用程序之前,請先調用。操作:帖子 - 應用程序成功啟動後調用。
事件:停止 - 要求服務停止時觸發。 *行動:在NSSM嘗試殺死應用程序之前,請先調用。
事件:退出 - 申請退出時觸發。 *操作:帖子 - 在NSSM清理了該應用程序之後。
事件:旋轉 - 請求在線日誌旋轉時觸發。 *動作:在NSSM旋轉日誌之前,請先調用。操作:帖子 - NSSM旋轉日誌後調用。
事件:電源動作:更改 - 系統電源狀態發生變化時調用。動作:簡歷 - 系統從備用中恢復時調用。
請注意,沒有停止/後掛鉤。這是因為當申請退出時,出口/郵政被調用,無論是否響應服務關閉請求而進行。停止/pre僅在優雅的關閉嘗試之前被調用。
NSSM將環境變量nssm_hook_version設置為正數。鉤子可以檢查數字的值以確定哪些其他環境變量可供選擇。
如果NSSM_HOUK_Version為1或更高,則提供了這些變量:
NSSM_EXE-通往NSSM本身的路徑。 NSSM_Configuration-構建NSSM可執行文件的信息,例如64位調試。 NSSM_Version- NSSM可執行文件的版本。 NSSM_BUILD_DATE-構建NSSM的日期。 NSSM_PID-運行NSSM可執行文件的進程ID。 NSSM_DEADLINE-毫秒的截止日期數,然後NSSM仍將殺死該掛鉤。 NSSM_SERVICE_NAME- NSSM控制的服務名稱。 NSSM_SERVICE_DISPLAYNAME-顯示服務的名稱。 NSSM_COMMAND_LINE-用於啟動應用程序的命令行。 NSSM_APPLICATION_PID-主要應用程序過程的進程ID。如果該過程不運行,則可能是空白的。 NSSM_EVENT-事件類觸發鉤子。 NSSM_ACTION-事件操作觸發鉤子。 NSSM_TRIGGER-服務控制觸發鉤子。如果沒有通過服務控件觸發鉤子,例如退出/郵政,則可能是空白的。 NSSM_LAST_CONTROL- NSSM處理的最後一個服務控制。 NSSM_START_REQUESTED_COUNT-要求啟動應用程序的次數。 NSSM_START_COUNT-應用程序成功啟動的次數。 NSSM_THROTTLE_COUNT-應用程序運行少於油門週期的次數。成功開始時或明確未大規模的服務時,將其重置為零。 NSSM_EXIT_COUNT-退出應用程序的次數。 NSSM_EXITCODE-應用程序的退出代碼。如果應用程序仍在運行或尚未啟動,則可能是空白的。 NSSM_Runtime- NSSM可執行文件已運行的毫秒數。 NSSM_APPLICATION_RUNTIME-該應用程序自上次啟動以來一直在運行的毫秒數。如果尚未啟動該應用程序,則可能是空白的。
NSSM的未來版本可能會提供更多的環境變量,在這種情況下,nssm_hook_version將設置為更高的數字。
掛鉤是通過以掛鉤操作命名的註冊表中創建字符串(reg_expand_sz)值來配置的,並將其放置在HKLM System currentControlset Services Services <Serive> parameters parameters appevents <epts <epts>。
例如,可以通過將Appevents Power 簡歷設置為:
%NSSM_EXE% restart %NSSM_SERVICE_NAME%
要在命令行上設置鉤子,請使用
nssm set <servicename> AppEvents <event>/<action> <command>
請注意,如果啟動/前掛鉤返回99的出口代碼,則NSSM將中止應用程序的啟動。
服務通常按以下順序運行掛鉤:
開始/啟動/啟動/郵政停止/前退出/郵政
如果應用程序崩潰並由NSSM重新啟動,則該訂單可能是:
開始/pre start/post ext/post start/pre start/post stop/pre Pre Exit/post
如果NSSM正在重定向stdout或stderr,則可以配置為重定向其運行的任何掛鉤的輸出。將批准的hooks設置為1,以啟用該功能。鉤子當然可以獨立於NSSM重定向自己的I/O。
NSSM可以使用用於安裝它們的相同的GUI編輯現有服務的設置。跑步
nssm edit <servicename>
提起gui。
NSSM為運行NSSM本身的服務提供了有限的編輯功能。當要求NSSM編輯沒有上述應用程序*註冊表設置的服務時,GUI將僅允許編輯系統設置,例如服務顯示名稱和描述。
NSSM可以從命令行檢索或設置單個服務參數。總的來說,語法如下,儘管請參見下文。
nssm get <servicename> <parameter>
nssm set <servicename> <parameter> <value>
參數也可以重置為其默認值。
nssm reset <servicename> <parameter>
NSSM識別的參數名稱與上述註冊表條目名稱相同,例如AppDirectory。
NSSM為運行NSSM本身的服務提供了有限的編輯功能。確認的參數如下:
描述:服務描述。 DisplayName:服務顯示名稱。環境:服務合併環境。 imagePath:服務可執行文件的路徑。 ObjectName:運行服務的用戶帳戶。名稱:服務密鑰名稱。開始:服務啟動類型。類型:服務類型。
這些對應於該服務的密鑰HKLM System CurrentControlset Services <服務>下的註冊表值。
請注意,NSSM將與命令行上傳遞的所有參數與空格中的所有參數相連,以形成要設置的值。因此,以下兩個調用將具有相同的效果。
nssm set <servicename> Description "NSSM managed service"
nssm set <servicename> Description NSSM managed service
在查詢環境時,Appenvironment,AppenvironmentExtra和環境參數會識別出一個其他參數。以下語法將打印為服務配置的所有額外環境變量
nssm get <servicename> AppEnvironmentExtra
而下面的語法將僅在ClassPath變量中進行配置,如果在環境塊中配置了classPath變量的值,或者如果未配置為空字符串。
nssm get <servicename> AppEnvironmentExtra CLASSPATH
設置環境塊時,應在單獨的命令行參數中指定每個變量為鍵=值對。例如:
nssm set <servicename> AppEnvironment CLASSPATH=C:Classes TEMP=C:Temp
或者,可以將鍵的鍵與A +或 - 符號前綴,以分別從塊中添加或刪除一對。
以下兩行設置了classpath和temp:
nssm set <servicename> AppEnvironment CLASSPATH=C:Classes
nssm set <servicename> AppEnvironment +TEMP=C:Temp
如果鍵已經存在,則指定 +鍵將覆蓋該值,同時保留密鑰的順序:
nssm set <servicename> AppEnvironment +CLASSPATH=C:NewClasses
以下語法從塊中刪除一個變量,同時將任何其他變量留在適當的位置。
nssm set <servicename> AppEnvironment -TEMP
指定-Key =值僅在現有值匹配時才刪除變量。
以下語法不會刪除temp = c: temp
nssm set <servicename> AppEnvironment -TEMP=C:WorkTemporary
+和 - 符號是環境變量中的有效字符。語法:鍵=值等於key = value,可用於設置以+/-或明確重置腳本中的塊開頭的變量:
nssm set <servicename> AppEnvironment :CLASSPATH=C:Classes
nssm set <servicename> AppEnvironment +TEMP=C:Temp
Appexit參數需要一個附加參數,以指定要獲取或設置的退出代碼。可以使用字符串默認值指定默認操作。
例如,要獲取服務的默認退出操作,請運行
nssm get <servicename> AppExit Default
要在使用退出代碼2退出時獲取退出操作,請運行
nssm get <servicename> AppExit 2
請注意,如果未為指定的退出代碼配置明確操作,則NSSM將打印默認的退出操作。
要設置配置服務以停止應用程序時停止,以2為2的退出代碼,請運行
nssm set <servicename> AppExit 2 Exit
AppPriority參數用於設置託管應用程序的優先級類。有效的優先級如下:
REALTIME_PRIORITY_CLASS HIGH_PRIORITY_CLASS上方
依賴組和依賴服務參數用於查詢或設置服務的依賴項。設置依賴項時,應在單獨的命令行參數中指定每個服務或服務組(之前 +符號之前)。例如:
nssm set <servicename> DependOnService RpcSs LanmanWorkstation
或者,依賴項名稱可以用A +或 - 符號前綴以分別添加或刪除依賴關係。
以下兩行設置了RPCSS和LanmanWorkstation的依賴關係:
nssm set <servicename> DependOnService RpcSs
nssm set <servicename> DependOnService +LanmanWorkstation
Follwing語法消除了對RPCSS的依賴性:
nssm set <servicename> DependOnService -RpcSs
嚴格來說,服務組應與 +符號前綴。要指定對組的單個依賴性, +符號可以以:符號為前綴。
以下行是等效的,每個行僅設定對NetBiosGroup的依賴性:
nssm set <servicename> DependOnGroup NetBIOSGroup
nssm set <servicename> DependOnGroup :NetBIOSGroup
nssm set <servicename> DependOnGroup :+NetBIOSGroup
儘管這些行增加了任何現有依賴性:
nssm set <servicename> DependOnGroup +NetBIOSGroup
nssm set <servicename> DependOnGroup ++NetBIOSGroup
名稱參數只能查詢,而不是設置。它返回服務的註冊表密鑰名稱。這可能會知道您是否可以利用這一事實,即您可以在語法要求的任何地方替換服務的顯示名稱。
ObjectName參數僅在設置用戶名時才需要附加參數。附加參數是用戶的密碼。
要檢索用戶名,請運行
nssm get <servicename> ObjectName
要設置用戶名和密碼,請運行
nssm set <servicename> ObjectName <username> <password>
請注意,論點串聯規則仍然適用。以下調用是有效的,並且會產生預期效果。
nssm set <servicename> ObjectName <username> correct horse battery staple
以下知名用戶名不需要密碼。使用密碼參數時可以省略:
“ localsystem” aka“ aka” aka“ nt權威系統”“ a localservice” aka“ aka”本地服務aka“ aka” nt aka“ nt nternetservice”“ networkService”“ networkService” aka“ aka aka” aka aka aka“ nt ewertion network Service Network Service”虛擬服務“虛擬服務”
開始參數用於查詢或設置服務的啟動類型。有效的服務啟動類型如下:
service_auto_start:啟動時自動啟動。 service_delayed_start:啟動時延遲啟動。 service_demand_start:手動服務啟動。 service_disabled:服務已禁用。
請注意,在Vista之前的Windows版本上不支持Service_delayed_start。如果延遲啟動不可用,NSSM將將服務設置為自動啟動。
類型參數用於查詢或設置服務類型。 NSSM識別當前已記錄的所有服務類型,但僅允許設置兩種類型之一:
Service_win32_own_process:獨立服務。這是默認值。 service_interactive_process:可以與桌面交互的服務。
請注意,僅當服務在當地系統帳戶下運行時,才能將其配置為交互式。配置交互式服務的安全方法分為兩個階段,如下。
nssm reset <servicename> ObjectName
nssm set <servicename> Type SERVICE_INTERACTIVE_PROCESS
NSSM提供基本的服務控制功能。
nssm start <servicename>
nssm restart <servicename>
nssm stop <servicename>
nssm status <servicename>
nssm statuscode <servicename>
“ NSSM狀態”和“ NSSM狀態代碼”的輸出是代表服務狀態的字符串,例如Service_Running。
如果狀態獲得成功檢索,則“ NSSM狀態”的退出代碼為0。如果退出代碼不是零,則存在錯誤。
“ NSSM狀態代碼”的退出代碼將是服務狀態的數字值,例如Service_Running。零不是有效的服務狀態代碼。如果出口代碼為零,則存在錯誤。
NSSM也可以刪除服務。跑步
nssm remove <servicename>
刪除服務。您將提示在刪除服務之前確認。盡量不要刪除基本系統服務...
要刪除無GUI確認的服務,請運行
nssm remove <servicename> confirm
盡量不要刪除基本系統服務...
NSSM日誌到Windows事件日誌。它將其自身註冊為事件日誌源,並為其日誌的每種消息使用唯一的事件ID。新版本可能會添加事件類型,但現有的事件ID將永遠不會更改。
由於NSSM寄存器本身的方式,您應該知道,如果您打開事件查看器,並且如果它們不是相同的版本,則可能無法替換NSSM二進製文件,並且從不同位置運行多個NSSM的實例可能會造成混淆。
以下命令將打印NSSM管理的所有服務的名稱:
nssm list
要查看系統上的所有服務,而不僅僅是NSSM的服務,請全部使用:
nssm list all
以下命令將打印由給定服務啟動的過程ID和可執行過程的可執行過程:
nssm processes <servicename>
請注意,如果在運行較舊版本的Windows的64位系統上運行32位NSSM,則將無法查詢64位進程的路徑。
NSSM可以轉儲將重新創建服務配置的命令。可以將輸出粘貼到批處理腳本中以備份服務或傳輸到另一台計算機。
nssm dump <servicename>
由於服務配置可能包含需要從命令提示符引用或逃脫的字符,因此NSSM試圖通過添加引號和Caret Escap aff Pusply在運行腳本時正確地產生輸出。
為了促進複製服務,轉儲命令接受第二個參數,該參數指定了要在輸出中使用的服務名稱。
nssm dump <servicename> <newname>
轉儲中的行將在顯示配置時引用服務。
安裝虛幻的錦標賽服務器:
nssm install UT2004 c:gamesut2004systemucc.exe server
作為“遊戲”用戶運行服務器:
nssm set UT2004 ObjectName games password
將服務器配置為登錄到文件:
nssm set UT2004 AppStdout c:gamesut2004service.log
將服務器限制為單個CPU:
nssm set UT2004 AppAffinity 0
卸下服務器:
nssm remove UT2004 confirm
找出帶有顯示名稱的服務的服務名稱:
nssm get "Background Intelligent Transfer Service" Name
已知NSSM與Visual Studio 2008和更高版本一起編譯。如果您安裝了適當的SDK並編輯NSSM.VCPROJ和NSSM.SM.SLN文件以設置較低的版本編號,則舊的Visual Studio版本可能會或可能不起作用。眾所周知,他們不使用默認設置。
NSSM還將與Visual Studio 2010一起編譯,但由此產生的可執行文件將不會在比XP SP2的Windows版本上運行。如果您需要與較舊的Windows版本的兼容性,則應將平台工具集更改為項目配置屬性一般部分中的V90。
感謝Bernard Loh找到了帶有服務恢復的錯誤。感謝Benjamin Mayrargue(www.softlion.com)增加了64位支持。感謝Joel Reingold發現了命令行截斷錯誤。感謝Arve Knudsen發現了監視應用程序的兒童流程,可以在服務關閉時運行,並且AppDirectory Confucky Confused NSSM缺少註冊表值。感謝Peter Wagemans和Laszlo Keresztfalvi建議重新啟動節流。感謝Eugene Lifshitz在CreateProcess()中找到一個邊緣案例,並為如何在包含空格的路徑中正確構建消息。感謝Rob Sharp指出,NSSM並不尊重Srvany使用的Appenvironment註冊表價值。感謝Szymon Nowak在Windows 2000兼容性方面提供的幫助。感謝François-RégisTardy和Gildas le Nadan的法語翻譯。感謝Emilio Frini發現法語在未翻譯用戶的顯示語言時無意間將其視為默認語言。感謝Riccardo Gusmeroli和Marco Certelli的意大利翻譯。感謝Eric Cheldelin的靈感,在關閉時產生了Control-C事件。感謝布萊恩·巴克斯特(Brian Baxter)建議如何從命令提示符中逃脫報價。感謝Russ Holmann建議關閉超時的配置。感謝Paul Spause發現了帶有默認註冊表條目的錯誤。感謝Bughunter發現了更多的GUI錯誤。感謝道格·沃森(Doug Watson)提出的文件旋轉。多虧了OUTHE設置過程的優先級。感謝羅伯特·米德爾頓(Robert Middleton)提出的過程親和力支持的建議和草案。感謝Andrew Redzmax提出了無條件的重啟延遲。感謝Bryan Senseman注意到使用重定向的Stdout和/或Stderr的應用程序將失敗。感謝Czenda Czendov在Visual Studio 2013和Server 2012R2方面的幫助。感謝Alessandro Gherardi的報告和草案修復了該錯誤的修復程序,該錯誤的第二次重新啟動將具有損壞的環境。感謝Hadrien Kohl建議禁用遊戲機窗口的菜單。感謝Allen Vailliencourt注意到將服務配置為在本地用戶帳戶下運行的錯誤。感謝山姆·湯森(Sam Townsend)注意到了terminateProcess()的回歸。感謝巴雷特·劉易斯(Barrett Lewis)建議跳過終止應用程序的子流程的選項。感謝MiguelAngelTerrón建議複製/截斷旋轉。感謝Yuriy Lesiuk建議在向註冊表查詢參數之前設置環境。感謝Gerald Haider注意到在包含空格的路徑中安裝NSS的服務是技術上的漏洞。感謝Scott Ware報告了在XP 32位上保存環境的崩潰。感謝Stefan和Michael Scherer報告了一個錯誤編寫事件消息源的錯誤。感謝Paul Baxter在Visual Studio 2015上的幫助。感謝Mathias Breiner在Visual Studio和一些註冊表修復方面的幫助。感謝大衛·布雷姆納(David Bremner)的一般整理。感謝Nabil Redmann建議重定向掛鉤的輸出。感謝Bader Aldurai建議的過程樹。感謝克里斯蒂安·朗(Christian Long)提出的虛擬帳戶。感謝Marcin Lewandowski發現附加到大文件的錯誤。感謝Nicolas Ducrocq建議時間戳重定向輸出。感謝tanaka的卑鄙akira tanaka的建議和初步實現了狀態代碼命令。感謝Kirill Kovalenko向Nano Server報告了崩潰。感謝Connor Reynolds發現了潛在的緩衝區溢出。感謝Foi發現了與64個核心的懸掛。
NSSM是公共領域。您可以無條件地使用它和/或其源代碼出於所需的任何目的。