[轉]Windows服務“允許服務與桌面交互”的使用和修改方法


上一篇文章是純 C# 代碼的形式勾上 “允許服務與桌面交互” 選項的

本文轉載自:http://blog.csdn.net/lanruoshui/article/details/4756408

描述:在自己寫的一個系統服務程序,需要經常用到“允許與桌面進行交互”的設置,網上很多使用修改注冊表的形式實現,我測試過,修改注冊表后,選中的勾是選上了,但不能彈出應用程序;據說重啟電腦后可以,但我不想重啟,實際應用也不允許重啟,故沒有測試重啟是否可行的情況。如圖:

 

例如:

當我需要運行服務程序的時候,彈出我的應用程序,則要在Windows服務“允許服務與桌面交互”中打勾,

當我不想彈出應用程序界面的時候,則去掉其中的勾選。

實現方式:

1.在服務程序安裝時編程實現,ProjectInstaller.cs


/*----------------------------------------------------------------
// 穗聯技術公司
//
// 文件名:ProjectInstaller.cs
// 文件功能描述:服務程序安裝,安裝后,把服務設置為允許允許服務與桌面交互
// 編寫人:周林郁
-----------------------------------------------------------------*/
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
//using System.Linq;
using Microsoft.Win32; //對注冊表操作一定要引用這個命名空間


namespace MonitorService
{
    [RunInstaller(true)]
    public partial class ProjectInstaller : Installer
    {
        public ProjectInstaller()
        {
            InitializeComponent();            
            //this.Context.Parameters["ServerCode"].ToString(); // 讀取安裝時輸入的服務器編號           
        }

        private void ProjectInstaller_AfterInstall(object sender, InstallEventArgs e)
        {
            //設置允許服務與桌面交互
            SetServiceTable("MonitorService");            
        }
        /// <summary>
        /// 設置允許服務與桌面交互 ,修改了注冊表,要重啟系統才能生效
        /// </summary>
        /// <param name="ServiceName">服務程序名稱</param>
        private void SetServiceTable(string ServiceName)
        {
            RegistryKey rk = Registry.LocalMachine;
            string key = @"SYSTEM/CurrentControlSet/Services/" + ServiceName;
            RegistryKey sub = rk.OpenSubKey(key, true);
            int value = (int)sub.GetValue("Type");
            sub.SetValue("Type", value | 256);
        }
    }
}

 

2.注冊表修改

onstart的時候修改注冊表    
   [HKEY_LOCAL_MACHINE"SYSTEM"CurrentControlSet"Services"你的服務名]    
   "Type"=dword:00000010    
   key    value+256    
   比如現在00000010是16+256=272    
   16精制就是00000110 
 

3.SC程序修改, 允許與桌面進行交互

 在dos命令提示符下輸入:
sc config MonitorService type= interact type= own

 回車即可。

可以用批處理的方式實現,把下面代碼保存為 myservice.bat 即可:

 rem 配置服務程序為允許與桌面進行交互方式
@echo "准備停止服務程序..."
sc stop MyService
@echo "設置允許與桌面進行交互方式允許"
sc config MyService type= interact type= own
@echo "正在重新啟動服務..."
sc start MyService
@echo "啟動服務成功!"

 

取消“允許與桌面進行交互”

DOS命令提示符下運行下面語句即可:

 sc config MyService type= own

 

 

經測試:1,2 可以選中“允許與桌面進行交互”,但啟動服務的時候,不能彈出應用程序的界面。

           3 可以完美實現所有要求。

至此,我遇到的問題也完美的得到解決。

 

參考資料:

 SC
與“服務控制器”和已安裝設備通訊。SC.exe 檢索和設置有關服務的控制信息。可以使用 SC.exe 來測試和調試服務程序。可以設置存儲在注冊表中的服務屬性來控制如何在啟動時和作為后台程序運行時啟動服務應用程序。SC.exe 的參數可以配置指定的服務,檢索當前服務的狀態,也可以停止和啟動服務。可以生成批處理文件來調用不同的 SC.exe 命令以自動啟動或關閉服務序列。SC.exe 提供的功能類似於“控制面板”中“管理工具”項中的“服務”。

有關命令的語法,請單擊下面任一 sc 命令:

sc boot

表明最近的啟動是否應該存儲為上次已知的正常配置。

語法
sc [ServerName] boot [{bad|OK}]

參數
ServerName
指定服務所在的遠程服務器名稱。名稱必須采用通用的命名慣例 (UNC) 格式("""myserver")。若要在本機上運行 SC.exe,請忽略此參數。
[{bad|OK}]
指定最近的啟動是否錯誤或它是否應該存儲為上次已知的正常配置。
/?
在命令提示符顯示幫助。
范例
下面的范例顯示了如何使用 sc boot 命令:

sc boot ok
sc boot bad

sc config

修改注冊表和“服務控制管理器”數據庫中的服務項的值。

語法
sc [ServerName] config [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]

參數
ServerName
指定服務所在的遠程服務器名稱。名稱必須采用通用的命名慣例(UNC)格式("""myserver")。若要在本機上運行 SC.exe,請忽略此參數。
ServiceName
指定由 getkeyname 操作返回的服務名。
type= {own|share|kernel|filesys|rec|adapt|interact type= {own|share}}
指定該服務類型。 值 說明
own 服務以其自身的進程運行。不與其它服務共享可執行文件。這是默認設置。
share 服務作為共享進程運行。它與其它服務共享一可執行文件。
kernel 驅動程序
filesys 文件系統驅動程序。
rec 文件系統識別驅動器(表示計算機上使用的文件系統)。
adapt 適配器驅動器(表示鍵盤、鼠標、磁盤驅動器這樣的硬件項)。
interact 服務可以與桌面交互作用,接收用戶的輸入。交互服務必須以在 LocalSystem 帳戶下運行。該類型必須與 type= own 或 type= shared(例如, type= interact type= own)結合使用。自身使用 type= interact 將會產生一個無效參數錯誤。

start= {boot|system|auto|demand|disabled}
指定服務的起始類型。 值 說明
boot 由啟動引導程序加載的設備驅動器。
system 在核心初始化過程中啟動的設備驅動器。
auto 每次計算機重新啟動時,甚至沒有人登錄計算機時,都能自動開始的服務。
demand 必須手動啟動的服務。如果沒有指定“start=”,這就默認值。
disabled 不能啟動的服務。要啟動一個禁用的服務,把啟動類型更改為其他值。

error= {normal|severe|critical|ignore}
如果在啟動中,服務器啟動失敗,則指定錯誤的嚴重性。 值 說明
normal 將記錄錯誤,並且顯示消息對話框,通知用戶服務啟動失敗。啟動將會繼續這是默認設置。
severe 記錄錯誤(如果存在)。計算機嘗試以最新的有效配置重新啟動。這可能是由於計算機能夠重新啟動,但服務器卻仍然不能運行。
critical 記錄錯誤(如果存在)。計算機嘗試以最新的有效配置重新啟動。如果上次已知正常的配置失敗,啟動也將失敗,啟動過程就會以“藍屏”錯誤而停止。
ignore 錯誤已記錄,啟動繼續。記錄錯誤超出在事件日志的范圍,不再給用戶作出提示。

binpath= BinaryPathName
指定一個進入服務二進制文件的路徑。
group= LoadOrderGroup
指定一個該服務為其中成員的組名。組列表儲存在注冊中的 HKLM"System"CurrentControlSet"Control"ServiceGroupOrder 子項中。默認設置為空值。
tag= {yes | no}
指定是否在“CreateService”調用中獲得 TagID。標記僅用於根啟動或系統啟動驅動程序。
depend= dependencies
指定必須在此項服務之前啟動的服務名或組名。前面斜線 (/) 分離開來的名字。
obj= {AccountName|ObjectName}
指定一個將運行的服務的賬戶名,或指定一個將會運行的驅動程序的 Windows 驅動程序對象名。默認設置為 LocalSystem。
displayname= DisplayName
指定一個可以在用戶界面程序用來為用戶標識服務的友好的、有意義的名稱。例如,一項服務的子項名是對用戶沒有幫助的 wuauserv,而顯示的名稱是“自動更新”。
password:password
指定一個密碼。如果使用了一個不是 LocalSystem 的帳戶,則此項是必需的。
/?
在命令提示符顯示幫助。
注釋
如果參數及其值之間沒有空格,(例如,是 type= own, 而不是 type=own),則操作會失敗。
范例
下面范例顯示了如何使用 sc config 命令:

sc config NewService binpath= "ntsd -d c:"windows"system32"NewServ.exe"

sc continue

為了繼續暫停的服務,要給服務發送一個 CONTINUE 控制請求。

語法
sc [ServerName] continue [ServiceName]

參數
ServerName
指定服務所在的遠程服務器名稱。該名稱必須使用 UNC 格式 ("""myserver")。若要在本機上運行 SC.exe,請忽略此參數。
ServiceName
指定由 getkeyname 操作返回的服務名。
/?
在命令提示符顯示幫助。
注釋
使用 continue 操作來繼續暫停的服務。
范例
下面的范例顯示了如何使用 sc continue 命令:

sc continue tapisrv

sc control

發送給服務CONTROL B。

語法
sc [ServerName] control [ServiceName] [{paramchange|netbindadd|netbindremove|netbindenable|netbinddisable|UserDefinedControlB}]

參數
ServerName
指定服務所在的遠程服務器名稱。該名稱必須使用 UNC 格式 ("""myserver")。若要在本機上運行 SC.exe,請忽略此參數。
ServiceName
指定由 getkeyname 操作返回的服務名。
{paramchange|netbindadd|netbindremove|netbindenable|netbinddisable|UserDefinedControlB}
指定要發送到服務的控制。
/?
在命令提示符顯示幫助。
sc create

為服務在注冊表和“服務控制管理器”中創建子項和入口。

語法
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]

參數
ServerName
指定服務所在的遠程服務器名稱。該名稱必須使用 UNC 格式 ("""myserver")。若要在本機上運行 SC.exe,請忽略此參數。
ServiceName
指定由 getkeyname 操作返回的服務名。
type= {own|share|kernel|filesys|rec|adapt|interact type= {own|share}}
指定該服務類型。默認類型為 type= own。 值 說明
own 服務以其自身的進程運行。不與其它服務共享可執行文件。這是默認設置。
share 服務作為共享進程運行。它與其它服務共享一可執行文件。
kernel 驅動程序
filesys 文件系統驅動程序。
rec 文件系統識別驅動器(表明在計算機上使用的文件系統)。
interact 服務可以與桌面交互作用,接收用戶的輸入。交互服務必須以在 LocalSystem 帳戶下運行。該類型必須與 type= own 或 type= shared(例如, type= interact type= own)結合使用。自身使用 type= interact 將會產生一個無效參數錯誤。

start= {boot|system|auto|demand|disabled}
指定服務的起始類型。默認的起始類型是 start= demand。 boot 由啟動引導程序加載的設備驅動器。
system 在核心初始化過程中啟動的設備驅動器。
auto 每次計算機重新啟動時,甚至沒有人登錄計算機時,都能自動開始的服務。
demand 必須手動啟動的服務。如果沒有指定“start=”,這就默認值。
disabled 不能啟動的服務。要啟動一個禁用的服務,把啟動類型更改為其他值。

error= {normal|severe|critical|ignore}
如果在啟動中,服務器啟動失敗,則指定錯誤的嚴重性。默認設置為 ascii。 normal 將記錄錯誤,並且顯示消息對話框,通知用戶服務啟動失敗。啟動將會繼續這是默認設置。
severe 記錄錯誤(如果存在)。計算機嘗試以最新的有效配置重新啟動。這可能是由於計算機能夠重新啟動,但服務器卻仍然不能運行。
critical 記錄錯誤(如果存在)。計算機嘗試以最新的有效配置重新啟動。如果上次已知正常的配置失敗,啟動也將失敗,啟動過程就會以“藍屏”錯誤而停止。
ignore 錯誤已記錄,啟動繼續。記錄錯誤超出在事件日志的范圍,不再給用戶作出提示。

binpath= BinaryPathName
指定一個進入服務二進制文件的路徑。binpath= 沒有默認值,必須要給出此字符串。
group= LoadOrderGroup
指定一個該服務為其中成員的組名。組列表儲存在注冊中的 HKLM"System"CurrentControlSet"Control"ServiceGroupOrder 子項中。默認設置為空值。
/hidden:{yes | no}
指定是否在“CreateService”調用中獲得 TagID。標記僅用於根啟動或系統啟動驅動程序。
depend= dependencies
指定必須要在此項服務之前啟動的服務名或組名。前面斜線 (/) 分離開來的名字。
obj= {AccountName|ObjectName}
指定一個將運行的服務的賬戶名,或指定一個將會運行的驅動程序的 Windows 驅動程序對象名。
displayname= DisplayName
指定被用戶界面程序用來標識服務的友好名稱。
password:password
指定一個密碼。如果使用的不是 LocalSystem 的帳戶,密碼是必需的。
/?
在命令提示符顯示幫助。
注釋
如果參數及其值之間沒有空格,(例如,是 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

從注冊表中刪除服務子項。如果服務正在運行或者另一個進程有一個該服務的打開句柄,那么為了刪除而標記該服務。

語法
sc [ServerName] delete [ServiceName]

參數
ServerName
指定服務所在的遠程服務器名稱。該名稱必須使用 UNC 格式 ("""myserver")。若要在本機上運行 SC.exe,請忽略此參數。
ServiceName
指定由 getkeyname 操作返回的服務名。
/?
在命令提示符顯示幫助。
注釋
使用“添加或刪除程序”刪除 DHCP、DNS 或任何其它內置的操作系統服務。“添加或刪除程序”不只刪除該服務的注冊表子項,而且還卸除該服務並刪除其所有的快捷方式。
范例
下面的范例顯示了如何使用 sc delete 命令:

sc delete newserv

sc description

設置服務的描述字符串。

語法
sc [ServerName] description [ServiceName] [Description]

參數
ServerName
指定服務所在的遠程服務器名稱。該名稱必須使用 UNC 格式 ("""myserver")。若要在本機上運行 SC.exe,請忽略此參數。
ServiceName
指定由 getkeyname 操作返回的服務名。
說明
為指定服務指定描述。如果沒有指定字符串,則不會修改該服務的描述。對包含在服務描述中的字符數量沒有限制。
/?
在命令提示符顯示幫助。
范例
下面的范例顯示了如何使用 sc description 命令:

sc description newserv "Runs quality of service control."

sc enumdepend

列出只有運行了指定服務才能夠運行的服務。

語法
sc [ServerName] enumdepend [ServiceName] [BufferSize]

參數
ServerName
指定服務所在的遠程服務器名稱。該名稱必須使用 UNC 格式 ("""myserver")。若要在本機上運行 SC.exe,請忽略此參數。
ServiceName
指定由 getkeyname 操作返回的服務名。
BufferSize
以字節為單位指定枚舉緩存區的大小。默認值為 1024 字節。
/?
在命令提示符顯示幫助。
注釋
如果緩沖區不夠大,enumdepend 操作只會部分輸出依存服務,並指定輸出所有依存服務所需的額外緩沖區大小。如果輸出被截斷,重新運行該操作並指定更大的緩沖區大小。
范例
下面的范例顯示了如何使用 sc enumdepend 命令:

sc enumdepend rpcss 5690
sc enumdepend tapisrv

sc failure

指定服務失敗時要采取的操作。

語法
sc [ServerName] failure [ServiceName] [reset= ErrorFreePeriod] [reboot= BroadcastMessage] [command= CommandLine] [actions= FailureActionsAndDelayTime]

參數
ServerName
指定服務所在的遠程服務器名稱。該名稱必須使用 UNC 格式 ("""myserver")。若要在本機上運行 SC.exe,請忽略此參數。
ServiceName
指定由 getkeyname 操作返回的服務名。
reset= ErrorFreePeriod
指定沒有失敗的周期長度(單位為秒),此后失敗計算器的應該重置為 0。這個參數必須與 actions= 參數結合使用。
reboot= BroadcastMessage
指定服務失敗時要廣播的消息。
command= CommandLine
指定服務失敗時要運行的命令行。有關在失敗時如何運行批處理或 VBS 文件的信息,請參閱“注釋”。
actions= FailureActionsAndDelayTime
指定失敗操作及其延遲時間(單位為毫秒),以正斜杠 (/) 隔開。下列操作有效:run、restart 和 reboot。此參數必須與 reset= 參數結合使用。在失敗時不采取操作請使用 actions= ""。
/?
在命令提示符顯示幫助。
注釋
不是所有的服務都允許更改其失敗選項。其中一些作為服務集的一部分運行。
要在失敗時運行批處理文件,請指定 cmd.exe Drive:"FileName.bat 為 command= 的參數,其中 Drive:"FileName.bat 是批處理文件的完整的合格名稱。
要在失敗時運行 VBS 文件,請指定 cscript drive:"myscript.vbs 為 command= 的參數,其中 drive:"myscript.vbs 是腳本文件的完整的合格名稱。
可以將三種不同的操作指定為 actions= 的參數,它們將會在服務的第一次、第二次、第三次失敗時使用。
如果參數及其值之間沒有空格,(例如,是 type= own,而不是 type=own),則操作會失敗。
范例
下面的范例顯示了如何使用 sc failure 命令:

sc failure msftpsvc reset= 30 actions= restart/5000
sc failure dfs reset= 60 command= c:"windows"services"restart_dfs.exe actions= run/5000
sc failure dfs reset= 60 actions= reboot/30000
sc failure dfs reset= 60 reboot= "The Distributed File System service has failed. Because of this, the computer will reboot in 30 seconds." actions= reboot/30000
sc failure myservice reset= 3600 reboot= "MyService crashed -- rebooting machine" command= "%windir%"MyServiceRecovery.exe" actions= restart/5000/run/10000/reboot/60000

sc getdisplayname

獲得與特定服務關聯的顯示名稱。

語法
sc [ServerName] getdisplayname [ServiceName] [BufferSize]

參數
ServerName
指定服務所在的遠程服務器名稱。該名稱必須使用 UNC 格式 ("""myserver")。若要在本機上運行 SC.exe,請忽略此參數。
ServiceName
指定由 getkeyname 操作返回的服務名。
BufferSize
指定緩沖區大小(以字節為單位)。默認值為 1024 字節。
/?
在命令提示符顯示幫助。
范例
下面的范例顯示了如何使用 sc getdisplayname 命令:

sc getdisplayname clipsrv
sc getdisplayname tapisrv
sc getdisplayname sharedaccess

sc getkeyname

使用特定服務的顯示名稱作為輸入會獲得與其相關聯的鍵名。

語法
sc [ServerName] getkeyname [ServiceDisplayName] [BufferSize]

參數
ServerName
指定服務所在的遠程服務器名稱。該名稱必須使用 UNC 格式 ("""myserver")。若要在本機上運行 SC.exe,請忽略此參數。
ServiceDisplayName
指定服務的顯示名稱。
BufferSize
指定緩沖區大小(以字節為單位)。默認值為 1024 字節。
/?
在命令提示符顯示幫助。
注釋
如果 ServiceDisplayName 包含空格,請使用引號將文本引起來(例如,"Service Display Name")。
范例
下面的范例顯示了如何使用 sc getkeyname 命令:

sc getkeyname "remote procedure call (rpc)"
sc getkeyname "internet connection sharing"
sc getkeyname clipbook

sc interrogate

向服務發送一個 INTERROGATE 控制請求。

語法
sc [ServerName] interrogate [ServiceName]

參數
ServerName
指定服務所在的遠程服務器名稱。該名稱必須使用 UNC 格式 ("""myserver")。若要在本機上運行 SC.exe,請忽略此參數。
ServiceName
指定由 getkeyname 操作返回的服務名。
/?
在命令提示符顯示幫助。
注釋
使用“服務控制管理器”向服務發送 INTERROGATE 會導致該服務使用“服務控制管理器”更新其狀態。
范例
下面的范例顯示了如何使用 sc interrogate 命令:

sc interrogate sharedaccess
sc interrogate rpcss

sc lock

鎖定“服務控制管理器”的數據庫。

語法
sc [ServerName] lock

參數
ServerName
指定服務所在的遠程服務器名稱。該名稱必須使用 UNC 格式 ("""myserver")。若要在本機上運行SC.exe,請忽略此參數。
/?
在命令提示符顯示幫助。
注釋
鎖定“服務控制管理器”的數據庫會阻止啟動任何服務。 如果要確保服務在停止之后不會啟動,請使用這個命令。這允許您不受干擾的進行一些操作(例如,刪除服務)。
使用 lock 操作鎖定“服務控制管理器”的數據庫,然后通過鍵入 u 來使數據庫解鎖。也可以從鎖定數據庫的進程中關閉該進程。
范例
下面的范例顯示了如何使用sc lock 命令:

sc lock

sc pause

發送 PAUSE 控制請求到服務。

語法
sc [ServerName] pause [ServiceName]

參數
ServerName
指定服務所在的遠程服務器名稱。該名稱必須使用 UNC 格式 ("""myserver")。若要在本機上運行 SC.exe,請忽略此參數。
ServiceName
指定由 getkeyname 操作返回的服務名。
/?
在命令提示符顯示幫助。
注釋
在終止服務之前使用 pause 操作來暫停它。
不是所有的服務都能夠被暫停。
在暫停時不是所有的服務都執行同樣的操作。一些服務繼續為已有的客戶端服務,但不會接受新的客戶端。其他的會終止對已有客戶端的服務,而且也不會接受新的客戶端。
范例
下面的范例顯示了如何使用sc pause 命令:

sc pause tapisrv

sc qc

查詢服務的配置信息。

語法
sc [ServerName] qc [ServiceName] [BufferSize]

參數
ServerName
指定服務所在的遠程服務器名稱。該名稱必須使用 UNC 格式 ("""myserver")。若要在本機上運行 SC.exe,請忽略此參數。
ServiceName
指定由 getkeyname 操作返回的服務名。
BufferSize
指定緩沖區大小(以字節為單位)。默認值為 1024 字節。
/?
在命令提示符顯示幫助。
注釋
qc 操作顯示有關服務的下列信息:SERVICE_NAME(服務在注冊表中的子鍵名)、TYPE、ERROR_CONTROL、BINARY_PATH_NAME、LOAD_ORDER_GROUP、TA、DISPLAY_NAME、DEPENDENCIES 和 SERVICE_START_NAME。
管理員可以使用 SC 來確定任一服務的二進制名稱,並查明它是否與其它服務共享一個進程,在命令行鍵入下列命令:

sc qc ServiceName

SC 有助於將 Microsoft 管理控制台 (MMC) 中的服務與“系統監視器”中的進程匹配起來。如果二進制名稱是 Services.exe,那么服務共享“服務控制器”進程。

Services.exe 啟動所有的服務。為保存系統資源,幾個為 Windows 開發的 Win32 服務被編寫為共享 Services.exe 進程。這些服務不作為獨立的進程列在“系統監視器”或“任務管理器”之中。Svchost.exe 也是如此,它是很多操作服務共享的服務主進程。

因為第三方 Win32 服務也可以配置為共享進程,所以不可能為每一個 Win32 服務創建一個進程。SC 可以用來獲得這些服務的配置信息。但是,如果一項服務不與其他服務共享其進程,那么在服務運行時,“系統監視器”中會出現其進程。

因為 SC 與包含在 Windows 中的 Services.exe 相比,提供了更為詳細和准確的、關於服務的信息,所以對於服務開發員來說 SC 更有用處。Services.exe 可以確定服務是在運行、停止還是正在暫停。盡管這些工具對於正在平穩運行的已調試程序已經足夠,但是它們提供的關於正在開發的服務的信息卻會使人誤解。例如,一項正在啟動的服務不管其實際運行與否都顯示為已啟動。

SC 執行對所有 Windows 服務控制應用編程接口 (API) 函數的調用。通過在命令行指定這些函數來將其設置為參數。

使用 SC,可以查詢服務狀態,檢索存儲在狀態結構域中的值。Services.exe 不能提供服務的完整狀態,但 SC 顯示了精確的服務狀態,以及最新的檢查點號碼和等待提示。可以將檢查點用作調試工具,原因在於它表明了在程序停止響應之前初始化進行了多遠。SC 也可以用來指定遠程計算機名,以便於在遠程計算機上調用服務 API 函數或查看服務狀態結構。

范例
下面的范例顯示了如何使用 sc qc 命令:

sc qc ""myserver newsrvice
sc qc rpcss 248

sc qdescription

顯示服務的描述字符串。

語法
sc [ServerName] qdescription [ServiceName] [BufferSize]

參數
ServerName
指定服務所在的遠程服務器名稱。該名稱必須使用 UNC 格式 ("""myserver")。若要在本機上運行 SC.exe,請忽略此參數。
ServiceName
指定由 getkeyname 操作返回的服務名。
BufferSize
指定緩沖區大小(以字節為單位)。默認值為 1024 字節。
/?
在命令提示符顯示幫助。
范例
下面的范例顯示了如何使用 sc qdescription 命令:

sc qdescription rpcss
sc qdescription rpcss 138

sc qfailure

顯示指定服務失敗時要執行的操作。

語法
sc [ServerName] qfailure [ServiceName] [BufferSize]

參數
ServerName
指定服務所在的遠程服務器名稱。該名稱必須使用 UNC 格式 ("""myserver")。若要在本機上運行 SC.exe,請忽略此參數。
ServiceName
指定由 getkeyname 操作返回的服務名。
BufferSize
指定緩沖區大小(以字節為單位)。默認值為 1024 字節。
/?
在命令提示符顯示幫助。
注釋
qfailure 操作顯示了下面有關服務的信息:SERVICE_NAME(服務在注冊表中的子鍵名)、RESET_PERIOD、REBOOT_MESSAGE、COMMAND_LINE 和 FAILURE_ACTIONS。
范例
下面的范例顯示了如何使用 sc qfailure 命令:

sc qfailure rpcss
sc qfailure rpcss 20

sc query

獲得和顯示關於指定的服務、驅動器、服務類型或驅動器類型的信息。

語法
sc [ServerName] query [ServiceName] [type= {driver|service|all}] [type= {own|share|interact|kernel|filesys|rec|adapt}] [state= {active|inactive|all}] [bufsize= BufferSize] [ri= ResumeIndex] [group= GroupName]

參數
ServerName
指定服務所在的遠程服務器名稱。該名稱必須使用 UNC 格式 ("""myserver")。若要在本機上運行 SC.exe,請忽略此參數。
ServiceName
指定由 getkeyname 操作返回的服務名。此 query 參數不與其他的 query 參數結合使用(除了 ServerName)。
type= {driver|service|all}
指定需要列出的內容。默認類型為 service。 值 說明
driver 僅指定需要枚舉的驅動程序。
service 僅指定需要枚舉的服務。
all 指定需要枚舉的驅動程序和服務器。

type= {own|share|interact|kernel|filesys|rec|adapt}
指定需要枚舉的服務類型或驅動程序。 值 說明
own 服務以其自身的進程運行。不與其它服務共享可執行文件。這是默認設置。
share 服務作為共享進程運行。它與其它服務共享一可執行文件。
interact 服務可以與桌面交互作用,接收用戶的輸入。交互服務必須以在 LocalSystem 帳戶下運行。
kernel 驅動程序
filesys 文件系統驅動程序。

state= {active|inactive|all}
指定用來枚舉的服務的已開始狀態。默認狀態是active。 值 說明
active 指定所有的激活服務。
inactive 指定所有暫停或停止的服務。
all 指定所有服務。

bufsize= BufferSize
以字節為單位指定枚舉緩存區的大小。默認大小為 1024 字節。當從查詢返回的顯示結果超過 1024 個字節時,增加枚舉緩沖區的大小。
ri= ResumeIndex
指定開始或繼續枚舉的索引數。默認值為 0。在查詢返回的信息超過默認緩沖區能夠顯示的大小時,請與 bufsize= 參數結合使用這個參數。
group= GroupName
指定枚舉的服務組。默認設置為所有組。
/?
在命令提示符顯示幫助。
注釋
如果參數及其值之間沒有空格,(例如,是 type= own,而不是 type=own),則操作會失敗。
query 操作顯示了以下關於服務的信息:SERVICE_NAME (服務在注冊表中的子鍵名)、TYPE、STATE(也是不可用的狀態)、WIN32_EXIT_B、SERVICE_EXIT_B、CHECKPOINT 和 WAIT_HINT。
在某些情況下,“type=”參數可以使用兩次。“type=”參數的第一次出現指定是否查詢服務、驅動器或所有這些。“type=”參數的第二次出現指定一個由“create”操作來進一步縮小查詢范圍的類型。
當 query 命令的顯示結果超過了枚舉緩沖區的大小時,顯示類似於以下的消息:
Enum:數據超出,在索引 79 處重新啟動需要 1822 字節

要顯示剩余的 query 信息,重新運行 query,設置 bufsize= 為字節數,設置 ri= 為指定的索引。例如,在命令行鍵入下列指令會顯示剩余的輸出:

sc query bufsize= 1822 ri= 79

范例
下面的范例顯示了如何使用 sc query 命令:

sc query
sc query messenger
sc query type= driver
sc query type= service
sc query state= all
sc query bufsize= 50
sc query ri= 14
sc query type= service type= interact
sc query type= driver group= ndis

sc queryex

獲得和顯示關於服務、驅動器、服務類型或驅動器類型的擴展信息。

語法
sc [ServerName] queryex [type= {driver|service|all}] [type= {own|share|interact|kernel|filesys|rec|adapt}] [state= {active|inactive|all}] [bufsize= BufferSize] [ri= ResumeIndex] [group= GroupName]

參數
ServerName
指定服務所在的遠程服務器名稱。該名稱必須使用 UNC 格式 ("""myserver")。若要在本機上運行 SC.exe,請忽略此參數。
ServiceName
指定由 getkeyname 操作返回的服務名。此 queryex 參數不與 ServerName 之外的任何其它 queryex 參數結合使用。
type= {driver|service|all}
指定需要列出的內容。默認類型為 service。 值 說明
driver 僅指定需要枚舉的驅動程序.
service 僅指定需要枚舉的服務。
all 指定需要枚舉的驅動程序和服務器。

type= {own|share|interact|kernel|filesys|rec|adapt}
指定需要枚舉的服務類型或驅動程序。 值 說明
own 服務以其自身的進程運行。不與其它服務共享可執行文件。這是默認設置。
share 服務作為共享進程運行。它與其它服務共享一可執行文件。
interact 服務可以與桌面交互作用,接收用戶的輸入。交互服務必須以在 LocalSystem 帳戶下運行。
kernel 驅動程序
filesys 文件系統驅動程序。

state= {active|inactive|all}
指定用來枚舉的服務的已開始狀態。默認狀態是 active。 值 說明
active 指定所有的激活服務。
inactive 指定所有暫停或停止的服務。
all 指定所有服務。

bufsize= BufferSize
以字節為單位指定枚舉緩存區的大小。默認大小為 1024 字節。
ri= ResumeIndex
指定開始或繼續枚舉的索引數。默認值為 0。
group= GroupName
指定枚舉的服務組。默認設置為所有組。
/?
在命令提示符顯示幫助。
注釋
如果參數及其值之間沒有空格,(例如,是 type= own,而不是 type=own),則操作會失敗。
queryex 操作顯示以下有關服務的信息:SERVICE_NAME(服務在注冊表中的子鍵名)、TYPE、STATE(也是不可用的狀態)、WIN32_EXIT_B、SERVICE_EXIT_B、CHECKPOINT、WAIT_HINT、PID 和 FLAGS。
在某些情況下,“type=”參數可以使用兩次。“type=”參數的第一次出現指定是否查詢服務、驅動器或所有這些。“type=”參數的第二次出現指定一個由“create”操作進一步縮小查詢范圍的類型。
在 queryex 命令的顯示結果超過了枚舉緩沖區大小時,顯示類似於以下的消息:
Enum:數據超出,在索引 75 處重新啟動需要 2130 個字節

要顯示 queryex 的剩余信息,重新運行 queryex,設置 bufsize= 為字節數, ri= 為指定索引。例如,在命令行鍵入下面的指令會顯示剩余的輸出:

sc queryex bufsize= 2130 ri= 75

范例
下面的范例顯示了如何使用 sc queryex 命令:

sc queryex messenger
sc queryex group= ""

sc querylock

查詢和顯示“服務控制管理器”數據庫的鎖定信息。

語法
sc [ServerName] querylock

參數
ServerName
指定服務所在的遠程服務器名稱。該名稱必須使用 UNC 格式 ("""myserver")。若要在本機上運行 SC.exe,請忽略此參數。
/?
在命令提示符顯示幫助。
sc sdset

使用“服務描述符定義語言” (SDDL) 來設置服務的安全描述符。

語法
sc [ServerName] sdset ServiceName ServiceSecurityDescriptor

參數
ServerName
指定服務所在的遠程服務器名稱。該名稱必須使用 UNC 格式 ("""myserver")。若要在本機上運行 SC.exe,請忽略此參數。
ServiceName
指定由 getkeyname 操作返回的服務名。
ServiceSecurityDescriptor
在 SDDL 中指定服務描述符。
/?
在命令提示符顯示幫助。
注釋
有關 SDDL 的信息,請參閱 MSDN 聯機知識庫中的“安全描述符定義語言”。(http://www.microsoft.com/)
sc sdshow

使用 SDDL 顯示服務的安全描述符。

語法
sc [ServerName] sdshow ServiceName

參數
ServerName
指定服務所在的遠程服務器名稱。該名稱必須使用 UNC 格式 ("""myserver")。若要在本機上運行 SC.exe,請忽略此參數。
ServiceName
指定由 getkeyname 操作返回的服務名。
/?
在命令提示符顯示幫助。
注釋
有關 SDDL 的信息,請參閱 MSDN 聯機知識庫 中的“安全描述符定義語言”。(http://www.microsoft.com/)
范例
sc sdshow rpcss

sc start

啟動正在運行的服務。

語法
sc [ServerName] start ServiceName [ServiceArguments]

參數
ServerName
指定服務所在的遠程服務器名稱。該名稱必須使用 UNC 格式 ("""myserver")。若要在本機上運行 SC.exe,請忽略此參數。
ServiceName
指定由 getkeyname 操作返回的服務名。
ServiceArguments
指定傳遞給要啟動的服務的服務參數。
/?
在命令提示符顯示幫助。
范例
下面的范例顯示了如何使用 sc start 命令:

sc start tapisrv

sc stop

向服務發送 STOP 控制請求。

語法
sc [ServerName] stop ServiceName

參數
ServerName
指定服務所在的遠程服務器名稱。該名稱必須使用 UNC 格式 ("""myserver")。若要在本機上運行 SC.exe,請忽略此參數。
ServiceName
指定由 getkeyname 操作返回的服務名。
/?
在命令提示符顯示幫助。
注釋
不是所有的服務都可以被停止。
范例
下面的范例顯示了如何使用 sc stop 命令:

sc stop tapisrv

 

 

 

 

參考網址:

http://www.3800hk.com/news/w43/55454_4.html 

http://technet.microsoft.com/zh-cn/library/cc772676.aspx


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM