使用SC命令使用(转)
?
//1 sc語法
作為一個命令行工具,SC.exe可以用來測試你自己的系統(tǒng),你可以設(shè)置一個批處理文件來使用不同的參數(shù)調(diào)用 SC.exe來控制服務(wù)。這個很有用,如果你想看看你的服務(wù)不斷的啟動和停止,我沒有試過哦!讓一個服務(wù)一下子 打開,一下子關(guān)閉,聽上去很不錯的。如果你的服務(wù)進(jìn)程里面有多個進(jìn)程的話,你可以保持一個進(jìn)程繼續(xù)運行不 讓它走開,然后讓另一個不斷的打開在關(guān)閉,還可以尋找一下內(nèi)存缺乏導(dǎo)致不完全清楚的證據(jù)。
???
下面介紹SC,SC QC,and SC QUERY
SC使用這樣的語法:
??? 1. SC [Servername] command Servicename [Optionname= Optionvalues]
??? 2. SC [command]
這里使用第一種語法使用SC,使用第二種語法顯示幫助。
下面介紹各種參數(shù)。
Servername
??? 可選擇:可以使用雙斜線,如\\\\myserver,也可以是\\\\192.168.0.1來操作遠(yuǎn)程計算機(jī)。如果在本地計算機(jī)上操作
就不用添加任何參數(shù)。
Command
??? 下面列出SC可以使用的命令。
config----改變一個服務(wù)的配置。(長久的)
continue--對一個服務(wù)送出一個繼續(xù)控制的要求。
control----對一個服務(wù)送出一個控制。
create----創(chuàng)建一個服務(wù)。(增加到注冊表中)
delete----刪除一個服務(wù)。(從注冊表中刪除)
EnumDepend--列舉服務(wù)的從屬關(guān)系。
GetDisplayName--獲得一個服務(wù)的顯示名稱。
GetKeyName--獲得一個服務(wù)的服務(wù)鍵名。
interrogate--對一個服務(wù)送出一個詢問控制要求。
pause----對一個服務(wù)送出一個暫停控制要求。
qc----詢問一個服務(wù)的配置。
query----詢問一個服務(wù)的狀態(tài),也可以列舉服務(wù)的狀態(tài)類型。
start----啟動一個服務(wù)。
stop----對一個服務(wù)送出一個停止的要求。
Servicename
??? 在注冊表中為service key制定的名稱。注意這個名稱是不同于顯示名稱的(這個名稱可以用net start和服務(wù)控
制面板看到),而SC是使用服務(wù)鍵名來鑒別服務(wù)的。
Optionname
??? 這個optionname和optionvalues參數(shù)允許你指定操作命令參數(shù)的名稱和數(shù)值。注意,這一點很重要在操作名稱和等
號之間是沒有空格的。一開始我不知道,結(jié)果………………,比如,start=optionvalues,這個很重要。 optionvalues可以是0,1,或者是更多的操作參數(shù)名稱和數(shù)值對。
??? 如果你想要看每個命令的可以用的optionvalues,你可以使用sc command這樣的格式。這會為你提供詳細(xì)的幫助。
Optionvalues
??? 為optionname的參數(shù)的名稱指定它的數(shù)值。有效數(shù)值范圍常常限制于哪一個參數(shù)的optionname。如果要列表請用
sc command來詢問每個命令。
Comments
??? 很多的命令需要管理員權(quán)限,所以我想說,在你操作這些東西的時候最好是管理員。呵呵!
??? 當(dāng)你鍵入SC而不帶任何參數(shù)時,SC.exe會顯示幫助信息和可用的命令。當(dāng)你鍵入SC緊跟著命令名稱時,你可以得 到一個有關(guān)這個命令的詳細(xì)列表。比如,鍵入sc create可以得到和create有關(guān)的列表。但是除了一個命令,sc query,這會導(dǎo)出該系統(tǒng)中當(dāng)前正在運行的所有服務(wù)和驅(qū)動程序的狀態(tài)。
??? 當(dāng)你使用start命令時,你可以傳遞一些參數(shù)(arguments)給服務(wù)的主函數(shù),但是不是給服務(wù)進(jìn)程的主函數(shù)。
SC create
??? 這個命令可以在注冊表和服務(wù)控制管理數(shù)據(jù)庫建立一個入口。
語法1
??? sc [servername] create Servicename [Optionname= Optionvalues]
??? 這里的servername,servicename,optionname,optionvalues和上面的一樣,這里就不多說了。這里我們詳細(xì)說 明一下optionname和optionvalues。
Optionname--Optionvalues
描述
type=----own, share, interact, kernel, filesys
關(guān)于建立服務(wù)的類型,選項值包括驅(qū)動程序使用的類型,默認(rèn)是share。
start=----boot, sys tem, auto, demand, disabled
關(guān)于啟動服務(wù)的類型,選項值包括驅(qū)動程序使用的類型,默認(rèn)是demand(手動)。
error=----normal, severe, critical, ignore
當(dāng)服務(wù)在導(dǎo)入失敗錯誤的嚴(yán)重性,默認(rèn)是normal。
binPath=--(string)
服務(wù)二進(jìn)制文件的路徑名,這里沒有默認(rèn)值,這個字符串是必須設(shè)置的。
group=----(string)
這個服務(wù)屬于的組,這個組的列表保存在注冊表中的ServiceGroupOrder下。默認(rèn)是nothing。
tag=----(string)
如果這個字符串被設(shè)置為yes,sc可以從CreateService call中得到一個tagId。然而,SC并不顯示這個標(biāo)簽,所
以使用這個沒有多少意義。默認(rèn)是nothing
depend=----(space separated string)有空格的字符串。
在這個服務(wù)啟動前必須啟動的服務(wù)的名稱或者是組。
obj=----(string)
賬號運行使用的名稱,也可以說是登陸身份。默認(rèn)是localsys tem
Displayname=--(string)
一個為在用戶界面程序中鑒別各個服務(wù)使用的字符串。
password=--(string)
一個密碼,如果一個不同于localsys tem的賬號使用時需要使用這個。
Optionvalues
??? Optionname參數(shù)名稱的數(shù)值列表。參考o(jì)ptionname。當(dāng)我們輸入一個字符串時,如果輸入一個空的引用這意味著
一個空的字符串將被導(dǎo)入。
Comments
??? The SC CREATE command perFORMs the operations of the CreateService API function.
??? 這個sc create命令執(zhí)行CreateService API函數(shù)的操作。詳細(xì)請見CreateService。
??? 例1
??? 下面這個例子在一臺叫做(\\\\myserver)的計算機(jī)上為一個叫“NewService”的服務(wù)建立的一個注冊表登記。
sc \\\\myserver create NewService binpath= c:\\winnt\\sys tem32\\NewServ.exe
??? 按照默認(rèn),這個服務(wù)會建立一個WIN32_SHARE_PROCESS使用SERVICE_DEMAND_START啟動方式。這將不會有任何從屬
關(guān)系,也將會按照localsys tem安全上下關(guān)系來運行。
??? 例2
??? 下面這個例子將在本地計算機(jī)上,建立一個服務(wù),它將會是一個自動運行服務(wù),并且運行在他自己的進(jìn)程上。它
從屬于TDI組和NetBios服務(wù)上。注意,你必須在從屬中間增加一個空格的引用。
sc create NewService binpath= c:\\winnt\\sys tem32\\NewServ.exe type= own
start= auto depend= \'+TDI Netbios\'
??? 例3
??? 服務(wù)開發(fā)者可以通過臨時改變二進(jìn)制路徑(影像路徑)的方式來將這個服務(wù)運行在內(nèi)核調(diào)試器的上下關(guān)系中。下 面這個例子就可以讓我們看到如何改變服務(wù)的配置。
sc config NewService binpath= \'ntsd -d c:\\winnt\\sys tem32\\Newserv.exe\'
這個例子會引起服務(wù)控制管理器調(diào)用ntsd.exe使用下例的參數(shù)字符串:
\'-d c:\\nt\\sys tem32\\NewServ.exe\'
當(dāng)系統(tǒng)裝入newserv.exe時ntsd將會轉(zhuǎn)而打斷調(diào)試器,所以斷點可以被設(shè)置在服務(wù)代碼里。
SC QC
這個SC QC“詢問配置”命令可以列出一個服務(wù)的配置信息和QUERY_SERVICE_CONFIG結(jié)構(gòu)。
語法1
sc [Servername] qc Servicename [Buffersize]
Parameters
servername和servicename前面已經(jīng)介紹過了,這里不再多說。
Buffersize,可選擇的,列出緩沖區(qū)的尺寸。
Comments
SC QC命令顯示了QUERY_SERVICE_CONFIG結(jié)構(gòu)的內(nèi)容。
以下是QUERY_SERVICE_CONFIG相應(yīng)的區(qū)域。
TYPE------dwServiceType
START_TYPE----dwStartType
ERROR_CONTROL----dwErrorControl
BINARY_PATH_NAME--lpBinaryPathName
LOAD_ORDER_GROUP--lpLoadOrderGroup
TAG------dwTagId
DISPLAY_NAME----lpDisplayName
DEPENDENCIES----lpDependencies
SERVICE_START_NAME--lpServiceStartName
例1
下面這個例子詢問了在上面例子中建立的“NewService”服務(wù)的配置:
sc \\\\myserver qc NewService
sc顯示下面的信息:
SERVICE_NAME: NewService
TYPE : 20 WIN32_SHARE_PROCESS
START_TYPE : 3 DEMAND_START
ERROR_CONTROL : 1 NORMAL
BINARY_PATH_NAME : c:\\winnt\\sys tem32\\NewServ.exe
LOAD_ORDER_GROUP :
TAG : 0
DISPLAY_NAME : NewService
DEPENDENCIES :
SERVICE_START_NAME : Localsys tem
NewService有能力和其他的服務(wù)共享一個進(jìn)程。但是它不是自動啟動的。二進(jìn)制文件名是NewServ.exe。這個服務(wù)
不依靠與其它的的服務(wù),而且運行在lcoalsys tem的安全上下關(guān)系中。這些都是調(diào)用QueryServiceStatus基本的返
回,如果還需要更多的細(xì)節(jié)屆時,可以看看API函數(shù)文件。
SC QUERY
SC QUERY命令可以獲得服務(wù)的信息。
語法:
sc [Servername] query { Servicename | Optionname= Optionvalues... }
參數(shù):
servername, servicename, optionname, optionvalues不在解釋。只談一下這個命令提供的數(shù)值。
Optionname--Optionvalues
Description
type=----driver, service, all
列舉服務(wù)的類型,默認(rèn)是service
state=----active, inactive, all
列舉服務(wù)的狀態(tài),默認(rèn)是active
bufsize=--(numeric values)
列舉緩沖區(qū)的尺寸,默認(rèn)是1024 bytes
ri=----(numeric values)
但開始列舉時,恢復(fù)指針的數(shù)字,默認(rèn)是0
Optionvalues
同上。
Comments
SC QUERY命令可以顯示SERVICE_STATUS結(jié)構(gòu)的內(nèi)容。
下面是SERVICE_STATUS結(jié)構(gòu)相應(yīng)的信息:
TYPE------dwServiceType
STATE------dwCurrentState, dwControlsAccepted
WIN32_EXIT_CODE----dwWin32ExitCode
SERVICE_EXIT_CODE--dwServiceSpecificExitCode
CHECKPOINT----dwCheckPoint
WAIT_HINT----dwWaitHint
在啟動計算機(jī)后,使用SC QUERY命令會告訴你是否,或者不是一個啟動服務(wù)的嘗試。如果這個服務(wù)成功啟動,WIN32_EXIT_CODE區(qū)間會將會包含一個0,當(dāng)嘗試不成功時,當(dāng)它意識到這個服務(wù)不能夠啟動時,這個區(qū)間也會提供一個退出碼給服務(wù)。
例子
查詢“NewService\'服務(wù)狀態(tài),鍵入:
sc query NewService
顯示一下信息:
SERVICE_NAME: NewService
TYPE : 20 WIN32_SHARE_PROCESS
STATE : 1 STOPPED
(NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 1077 (0x435)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
注意,這里存在一個給這個服務(wù)的退出碼,即使這個服務(wù)部不在運行,鍵入net helpmsg 1077,將會得到對1077錯誤信息的說明:
上次啟動之后,仍未嘗試引導(dǎo)服務(wù)。
所以,這里我想說一句,希望大家可以活用net helpmsg,這會對你的學(xué)習(xí)有很大的幫助。
下面在對SC query的命令在說明一下:
列舉活動服務(wù)和驅(qū)動程序狀態(tài),使用以下命令:
sc query
顯示messenger服務(wù),使用以下命令:
sc query messenger
只列舉活動的驅(qū)動程序,使用以下命令:
sc query type= driver
列舉Win32服務(wù),使用以下命令:
sc query type= service
列舉所有的服務(wù)和驅(qū)動程序,使用以下命令:
sc query state= all
用50 byte的緩沖區(qū)來進(jìn)行列舉,使用以下命令:
sc query bufsize= 50
在恢復(fù)列舉時使用index=14,使用以下命令:
sc query ri=14
列舉所有的交互式服務(wù),使用以下命令:
sc query type= service type= interact
好了,說到這里。SC命令基本上已經(jīng)說完了。
//2 sc.exe命令功能列表:
1.更改服務(wù)的啟動狀態(tài)(這是比較有用的一個功能)
2.刪除服務(wù)(除非對自己電腦的軟、硬件所需的服務(wù)比較清楚,否則不建議刪除任何系統(tǒng)服務(wù),特別是基礎(chǔ)服務(wù))
3.停止或啟動服務(wù)(功能上類似于net stop/start,但速度更快且能停止的服務(wù)更多)
具體的命令格式如下:
修改服務(wù)啟動類型的命令行格式為(特別注意start=后面有一個空格)
sc config 服務(wù)名稱 start= demand(設(shè)置服務(wù)為手動啟動)
sc config 服務(wù)名稱 start= disabled(設(shè)置服務(wù)為禁用)
停止/啟動服務(wù)的命令行格式為
sc stop/start 服務(wù)名稱
注意:平時常接觸的都是服務(wù)的顯示名稱,而以上所指是服務(wù)名稱,都可以在控制面板->管理工具->服務(wù)里面,雙擊對應(yīng)的服務(wù)來查詢。
先舉例說明一下具體的設(shè)置方法:
如設(shè)置遠(yuǎn)程注冊表服務(wù)為手動其格式為
sc config RemoteRegistry start= demand
設(shè)為禁用的格式為:
sc config RemoteRegistry start= disabled
停止服務(wù)則格式為:
sc stop RemoteRegistry
首先把自己所需設(shè)置的服務(wù)名稱查到之后,按照上面的格式做成批處理文件,重裝系統(tǒng)之后只要運行批處理文件即可。
以下是我的設(shè)置,以XpSp2為藍(lán)本,可比對所用的系統(tǒng)進(jìn)行增刪和修改。注:未加入XpSp2的自動更新、安全中心、防火墻。
sc config Alerter start= demand
sc config TrkWks start= demand
sc config helpsvc start= demand
sc config policyAgent start= demand
sc config dmserver start= demand
sc config WmdmpmSn start= demand
sc config Spooler start= demand
sc config RemoteRegistry start= demand
sc config NtmsSvc start= demand
sc config seclogon start= demand
sc config Schedule start= demand
sc config WebClient start= demand
sc config W32Time start= demand
sc config WZCSVC start= demand
sc config ERSvc start= demand
sc config Themes start= demand
sc config FastUserSwitchingCompatibility start= disabled
sc config Messenger start= disabled
sc config protectedStorage start= disabled
sc config SSDpSRV start= disabled
sc config TermService start= disabled
sc config ShellHWDetection start= disabled
如果需要立即關(guān)閉服務(wù)也可把以下代碼跟在上面的代碼之后
sc stop W32Time
sc stop ShellHWDetection
sc stop TrkWks
sc stop helpsvc
sc stop dmserver
sc stop policyAgent
sc stop Spooler
sc stop RemoteRegistry
sc stop seclogon
sc stop Schedule
sc stop WZCSVC
sc stop ERSvc
sc stop Themes
sc stop FastUserSwitchingCompatibility
sc stop protectedStorage
sc stop SSDpSRV
sc stop WebClient
最后把修改好之后的代碼存為services.cmd,在以后進(jìn)行服務(wù)設(shè)置時,直接運行事先保存好的批處理文件就可以做到事半功倍了。
看到這里,使用Win2000的朋友也不必失望,sc.exe這個命令行工具對Win2000同樣適用,可從裝有WinXp或者Win2003的機(jī)器里面拷貝sc.exe文件,與保存好的批處理文件放在一起,然后執(zhí)行批處理文件即可。
對注冊表比較熟悉的朋友可能會想到用注冊表來設(shè)置服務(wù)的啟動類型,這也是一種可行的方法,本身卻有著內(nèi)在不足。原因是服務(wù)啟動類型在注冊表中對應(yīng)的鍵值較長且分散,進(jìn)行整理不方便直觀且易錯漏,所以這種方法比較適用于無人值守的安裝時使用。
//3? 使用SC命令時注意事項
Windows 2003 Server存在一個sc命令,(好像Windows 2000/XP/NT都有這個。)該命令可以手工創(chuàng)建Windows服務(wù)(NT Service)
以下是微軟幫助文件中對sc命令的描述:
與“服務(wù)控制器”和已安裝設(shè)備進(jìn)行通訊。SC.exe 檢索和設(shè)置有關(guān)服務(wù)的控制信息。可以使用 SC.exe 來測試和調(diào)試服務(wù)程序。可以設(shè)置存儲在注冊表中的服務(wù)屬性來控制如何在啟動時和作為后臺程序運行時啟動服務(wù)應(yīng)用程序。SC.exe 的參數(shù)可以配置指定的服務(wù),檢索當(dāng)前服務(wù)的狀態(tài),也可以停止和啟動服務(wù)。可以生成批處理文件來調(diào)用不同的 SC.exe 命令以自動啟動或關(guān)閉服務(wù)序列。SC.exe 提供的功能類似于“控制面板”中“管理工具”項中的“服務(wù)”。
其他命令選項可以自己查幫助,主要看看create和delete這兩條我們常用的命令
sc create
為服務(wù)在注冊表和“服務(wù)控制管理器”中創(chuàng)建子項和入口。
語法
sc [ServerName] create [ServiceName] [type= {own | share | kernel | filesys | rec | adapt | interact type= {own | share}}] [start= {boot | system | auto | demand | disabled}] [error= {normal | severe | critical | ignore}] [binpath= BinaryPathName] [group= LoadOrderGroup] [tag= {yes | no}] [depend= dependencies] [obj= {AccountName | ObjectName}] [displayname= DisplayName] [password= Password]
參數(shù)
ServerName
指定服務(wù)所在的遠(yuǎn)程服務(wù)器名稱。該名稱必須使用 UNC 格式(“\\myserver”)。要在本機(jī)上運行 SC.exe,請忽略此參數(shù)。
ServiceName
指定由 getkeyname 操作返回的服務(wù)名。
type= {own | share | kernel | filesys | rec | adapt | interact type= {own | share}}
指定該服務(wù)類型。默認(rèn)類型為 type= own。
值
描述
own
服務(wù)以其自身的進(jìn)程運行。不與其他服務(wù)共享可執(zhí)行文件。這是默認(rèn)設(shè)置。
share
服務(wù)作為共享進(jìn)程運行。它與其他服務(wù)共享一可執(zhí)行文件。
kernel
驅(qū)動程序。
filesys
文件系統(tǒng)驅(qū)動程序。
rec
文件系統(tǒng)識別驅(qū)動器(標(biāo)識在計算機(jī)上使用的文件系統(tǒng))。
interact
服務(wù)可以與桌面交互作用,接收用戶的輸入。交互服務(wù)必須在 LocalSystem 帳戶下運行。該類型必須與 type= own 或 type= shared(例如,type= interact type= own)結(jié)合使用。單獨使用 type= interact 將會產(chǎn)生一個無效參數(shù)錯誤。
?
start= {boot | system | auto | demand | disabled}
指定服務(wù)的啟動類型。默認(rèn)的啟動類型是 start= demand。
boot
由啟動引導(dǎo)程序加載的設(shè)備驅(qū)動器。
system
在核心初始化過程中啟動的設(shè)備驅(qū)動器。
auto
每次計算機(jī)重新啟動時,甚至沒有人登錄計算機(jī)時,都能自動開始的服務(wù)。
demand
必須手動啟動的服務(wù)。如果沒有指定 start=,這就默認(rèn)值。
disabled
不能啟動的服務(wù)。要啟動一個禁用的服務(wù),把啟動類型更改為其他值。
?
error= {normal | severe | critical | ignore}
如果在啟動中,服務(wù)器啟動失敗,則指定錯誤的嚴(yán)重性。默認(rèn)設(shè)置為 ascii。
normal
將記錄錯誤,并且顯示消息對話框,通知用戶服務(wù)啟動失敗。啟動將繼續(xù)。這是默認(rèn)設(shè)置。
severe
記錄錯誤(如果存在)。計算機(jī)嘗試以最新的有效配置重新啟動。這可能導(dǎo)致計算機(jī)能夠重新啟動,但服務(wù)器卻仍然不能運行。
critical
記錄錯誤(如果存在)。計算機(jī)嘗試以最新的有效配置重新啟動。如果上次已知正確的配置失敗,啟動也將失敗,啟動過程就會以“藍(lán)屏”錯誤而停止。
ignore
錯誤已記錄,啟動繼續(xù)。記錄錯誤超出在事件日志的范圍,不再給用戶作出提示。
?
binpath= BinaryPathName
指定一個進(jìn)入服務(wù)二進(jìn)制文件的路徑。binpath= 沒有默認(rèn)值,必須要給出此字符串。
group= LoadOrderGroup
指定一個該服務(wù)為其中成員的組名。組列表存儲在 HKLM\System\CurrentControlSet\Control\ServiceGroupOrder 子項的注冊表中。默認(rèn)設(shè)置為空值。
tag= {yes | no}
指定是否在“CreateService”調(diào)用中獲得 TagID。標(biāo)記僅用于根啟動或系統(tǒng)啟動驅(qū)動程序。
depend= dependencies
指定必須要在此項服務(wù)之前啟動的服務(wù)名或組名。名稱以斜線 (/) 分離開來。
obj= {AccountName | ObjectName}
指定一個將運行的服務(wù)的帳戶名,或指定一個將會運行的驅(qū)動程序的 Windows 驅(qū)動程序?qū)ο竺?
displayname= DisplayName
指定被用戶界面程序用來標(biāo)識服務(wù)的友好名稱。
password:password
指定一個密碼。如果使用的不是 LocalSystem 的帳戶,密碼是必需的。
/?
在命令提示符下顯示幫助。
注釋
如果參數(shù)及其值之間沒有空格,(例如,是 type= own,而不是 type=own),則操作會失敗。
示例
下面的示例顯示了如何使用 sc create 命令:
sc \\myserver create NewService binpath= c:\windows\system32\NewServ.exe
sc create NewService binpath= c:\windows\system32\NewServ.exe type= share start= auto depend= "+TDI Netbios"
sc delete
從注冊表中刪除服務(wù)子項。如果服務(wù)正在運行或者另一個進(jìn)程有一個該服務(wù)的打開句柄,那么此服務(wù)將標(biāo)記為刪除。
語法
sc [ServerName] delete [ServiceName]
參數(shù)
ServerName
指定服務(wù)所在的遠(yuǎn)程服務(wù)器名稱。該名稱必須使用 UNC 格式(“\\myserver”)。要在本機(jī)上運行 SC.exe,請忽略此參數(shù)。
ServiceName
指定由 getkeyname 操作返回的服務(wù)名。
/?
在命令提示符下顯示幫助。
注釋
使用“添加或刪除程序”刪除 DHCP、DNS 或任何其他內(nèi)置的操作系統(tǒng)服務(wù)。“添加或刪除程序”不只刪除該服務(wù)的注冊表子項,而且還卸載該服務(wù)并刪除其所有的快捷方式。
示例
下面的示例顯示了如何使用 sc delete 命令:
sc delete newserv
需要注意的是:
1. 在option= xxxxx格式中,“=”號和后面的內(nèi)容一定要有空格,如depend=? Tcpip
2. 如果命令中的需要進(jìn)行雙引號的嵌套,使用反斜杠加引號 " \" " 來進(jìn)行轉(zhuǎn)義處理。
?
?
總結(jié)
以上是生活随笔為你收集整理的使用SC命令使用(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一甜相机应用详情(壹是一的繁体字吗)
- 下一篇: Mono 2.0正式发布了