SC命令詳解(一個很有用的command)作為一個命令列工具,SC.exe可以用來測試你自己的系統,你可以設定一個批次檔來使用不同的參數調用 SC.exe來控制服務。一.SC使用這樣的文法:1. SC [Servername] command Servicename [Optionname= Optionvalues] 2. SC [command] 這裡使用第一種文法使用SC,使用第二種文法顯示協助。 下面介紹各種參數。 Servername 可選擇:可以使用雙斜線,如\\myserver,也可以是\\192.168.1.223來操作遠端電腦。如果在本機電腦上操作 就不用添加任何參數。 Command 下面列出SC可以使用的命令。 config 改變一個服務的配置。(長久的) continue 對一個服務送出一個繼續控制的要求。 control 對一個服務送出一個控制。 create 建立一個服務。(增加到註冊表中) delete 刪除一個服務。(從註冊表中刪除) EnumDepend 列舉服務的從屬關係。 GetDisplayName 獲得一個服務的顯示名稱。 GetKeyName 獲得一個服務的服務鍵名。 interrogate 對一個服務送出一個詢問控制要求。 pause 對一個服務送出一個暫停控制要求。 qc 詢問一個服務的配置。 query 詢問一個服務的狀態,也可以列舉服務的狀態類型。 start 啟動一個服務。 stop 對一個服務送出一個停止的要求。Servicename 在註冊表中為service key制定的名稱。注意這個名稱是不同於顯示名稱的(這個名稱可以用net start和服務控 制面板看到),而SC是使用服務鍵名來鑒別服務的。 Optionname這個optionname和optionvalues參數允許你指定操作命令參數的名稱和數值。注意,這一點很重要在操作名稱和等 號之間是沒有空格的。一開始我不知道,結果………………,比如,start= optionvalues,這個很重要。 optionvalues可以是0,1,或者是更多的巨集指令引數名稱和數值對。 如果你想要看每個命令的可以用的optionvalues,你可以使用sc command這樣的格式。這會為你提供詳細的協助。Optionvalues 為optionname的參數的名稱指定它的數值。有效數值範圍常常限制於哪一個參數的optionname。如果要列表請用 sc command來詢問每個命令。Comments 很多的命令需要管理員權限,所以我想說,在你操作這些東西的時候最好是管理員。呵呵! 當你鍵入SC而不帶任何參數時,SC.exe會顯示協助資訊和可用的命令。當你鍵入SC緊跟著命令名稱時,你可以得 到一個有關這個命令的詳細列表。比如,鍵入sc create可以得到和create有關的列表。 但是除了一個命令,sc query,這會匯出該系統中當前正在啟動並執行所有服務和驅動程式的狀態。 當你使用start命令時,你可以傳遞一些參數(arguments)給服務的主函數,但是不是給服務進程的主函數。二.SC create這個命令可以在註冊表和服務控制管理資料庫建立一個入口。 文法1 sc [servername] create Servicename [Optionname= Optionvalues] 這裡的servername,servicename,optionname,optionvalues和上面的一樣,這裡就不多說了。這裡我們詳細說 明一下optionname和optionvalues。 Optionname Optionvalues 描述 type= own, share, interact, kernel, filesys 關於建立服務的類型,選項值包括驅動程式使用的類型,預設是share。 start= boot, system, auto, demand, disabled 關於啟動服務的類型,選項值包括驅動程式使用的類型,預設是demand(手動)。 error= normal, severe, critical, ignore 當服務在匯入失敗錯誤的嚴重性,預設是normal。 binPath= (string) 服務二進位檔案的路徑名,這裡沒有預設值,這個字串是必須設定的。 group= (string) 這個服務屬於的組,這個組的列表儲存在註冊表中的ServiceGroupOrder下。預設是nothing。 tag= (string) 如果這個字串被設定為yes,sc可以從CreateService call中得到一個tagId。然而,SC並不顯示這個標籤,所 以使用這個沒有多少意義。預設是nothing depend= (space separated string)有空格的字串。 在這個服務啟動前必須啟動的服務的名稱或者是組。 obj= (string) 帳號運行使用的名稱,也可以說是登陸身份。預設是localsys tem Displayname= (string) 一個為在使用者介面程式中鑒別各個服務使用的字串。 password= (string) 一個密碼,如果一個不同於localsystem的帳號使用時需要使用這個。 Optionvalues Optionname參數名稱的數值列表。參考optionname。當我們輸入一個字串時,如果輸入一個空的引用這意味著 一個空的字串將被匯入。 Comments The SC CREATE command perFORMs the operations of the CreateService API function. 這個sc create命令執行CreateService API函數的操作。詳細請見CreateService。例子1 下面這個例子在電腦上建立叫“mirror”的服務建立的一個註冊表登記,是自動運行服務,從屬於TDI組和NetBios服務。 C:\WINDOWS\system32>sc create mirror binPath= "D:\Ftp\建立檔案夾\mirror.exe" type= own start= auto [SC] CreateService SUCCESS 重啟後生效例子2 刪除Mirror服務 C:\WINDOWS\system32>sc delete mirror binPath= "D:\Ftp\建立檔案夾\mirror.exe" type= own start= auto [SC] DeleteService SUCCESS三. SC QC這個SC QC“詢問配置”命令可以列出一個服務的配置資訊和QUERY_SERVICE_CONFIG結構。 文法1 sc [Servername] qc Servicename [Buffersize] Parameters servername和servicename前面已經介紹過了,這裡不再多說。 Buffersize,可選擇的,列出緩衝區的尺寸。 Comments SC QC命令顯示了QUERY_SERVICE_CONFIG結構的內容。 以下是QUERY_SERVICE_CONFIG相應的地區。 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 下面這個例子詢問了在上面例子中建立的“mirror”服務的配置: sc qc sc顯示下面的資訊: SERVICE_NAME: mirror TYPE : 10 WIN32_OWN_PROCESS START_TYPE : 2 AUTO_START ERROR_CONTROL : 1 NORMAL BINARY_PATH_NAME : D:\Ftp\ LOAD_ORDER_GROUP : TAG : 0 DISPLAY_NAME : mirror DEPENDENCIES : SERVICE_START_NAME : LocalSystem mirror有能力和其他的服務共用一個進程。這個服務 不依靠與其它的的服務,而且運行在lcoalsystem的安全上下關係中。這些都是調用QueryServiceStatus基本的返回,如果還需要更多的細節屆時,可以看看API函數檔案。 mirror四.SC QUERY SC QUERY命令可以獲得服務的資訊。 文法: sc [Servername] query { Servicename | ptionname= Optionvalues... } 參數: servername, servicename, optionname, optionvalues不在解釋。只談一下這個命令提供的數值。 Optionname Optionvalues Description type= driver, service, all 列舉服務的類型,預設是service state= active, inactive, all 列舉服務的狀態,預設是active bufsize= (numeric values) 列舉緩衝區的尺寸,預設是1024 bytes ri= (numeric values) 但開始列舉時,恢複指標的數字,預設是0 Optionvalues 同上。 CommentsSC QUERY命令可以顯示SERVICE_STATUS結構的內容。 下面是SERVICE_STATUS結構相應的資訊: TYPE dwServiceType STATE dwCurrentState, dwControlsAccepted WIN32_EXIT_CODE dwWin32ExitCode SERVICE_EXIT_CODE dwServiceSpecificExitCode CHECKPOINT dwCheckPoint WAIT_HINT dwWaitHint在啟動電腦後,使用SC QUERY命令會告訴你是否,或者不是一個啟動服務的嘗試。如果這個服務成功啟動,WIN32_EXIT_CODE區間會將會包含一個0,當嘗試不成功時,當它意識到這個服務不能夠啟動時,這個區間也會提供一個退出碼給服務。 例子 查詢“mirror'服務狀態,鍵入: sc query mirror 顯示一下資訊:SERVICE_NAME: mirror TYPE : 10 WIN32_OWN_PROCESS STATE : 1 STOPPED (NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN WIN32_EXIT_CODE : 0 (0x0) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0 注意,這裡存在一個給這個服務的退出碼,即使這個服務部不在運行,鍵入net helpmsg 1077,將會得到對1077錯誤資訊的說明: 上次啟動之後,仍未嘗試引導服務。 所以,這裡我想說一句,希望大家可以活用net helpmsg,這會對你的學習有很大的協助。 下面在對SC query的命令在說明一下: 列舉活動服務和驅動程式狀態,使用以下命令: sc query 顯示messenger服務,使用以下命令: sc query messenger 只列舉活動的驅動程式,使用以下命令: sc query type= driver 列舉Win32服務,使用以下命令: sc query type= service 列舉所有的服務和驅動程式,使用以下命令: sc query state= all 用50 byte的緩衝區來進行列舉,使用以下命令: sc query bufsize= 50 在恢複列舉時使用index=14,使用以下命令: sc query ri=14 列舉所有的互動式服務,使用以下命令: sc query type= service type= interact五、sc命令啟動已經禁用的服務,例如:啟動telnet服務sc config tlntsvr start= autonet start tlntsvr