IIS が有効になっているかどうかを検出する方法はありますか?
インストールされているかどうかを確認する方法は知っていますが、インストールされているが有効になっていないかどうかを知る必要があります。
また、これは InstallShield を介してネイティブに実行できますか? カスタム アクションを記述できるため、.NET 経由でこれをチェックすることは許容されますが、IS 呼び出しがある場合はそれが理想的です。
ヒント/ヒントは大歓迎です、ありがとう
IIS が有効になっているかどうかを検出する方法はありますか?
インストールされているかどうかを確認する方法は知っていますが、インストールされているが有効になっていないかどうかを知る必要があります。
また、これは InstallShield を介してネイティブに実行できますか? カスタム アクションを記述できるため、.NET 経由でこれをチェックすることは許容されますが、IS 呼び出しがある場合はそれが理想的です。
ヒント/ヒントは大歓迎です、ありがとう
サービスの状態を確認するには、どこにでもある WMI を使用します (必要な WMI クエリを理解するためにコードは VBScript です)。
IISrunning = false
wql = "SELECT state FROM Win32_Service WHERE name = 'W3SVC'"
Set w3svc = GetObject("winmgmts://.").ExecQuery(wql)
For Each service in w3svc
IISrunning = (service.State = "Running")
Next
WScript.Echo IISrunning
編集: これから IS スクリプトを作成してみます。構文エラーがあっても私を攻撃しないでください。
function BOOL DetectIIS()
OBJECT wmi, slist, obj;
NUMBER i;
BOOL IISrunning;
begin
IISrunning = false;
try
set wmi = CoGetObject( "winmgmts://.", "" );
if ( !IsObject(wmi) ) then
MessageBox("Failed to connect to WMI.", WARNING);
return false;
endif;
set slist = wmi.ExecQuery("SELECT state FROM Win32_Service WHERE name = 'W3SVC'");
if ( !IsObject(slist) ) then
MessageBox("Failed to get query W3SVC service state.", WARNING);
return false;
endif;
for i = 0 to slist.Count-1
set obj = slist.Item(i);
IISrunning = (obj.state = "Running");
endfor;
catch
MessageBox(Err.Description, WARNING);
return false;
endcatch;
return IISrunning;
end;
W3svc サービスに加えて、Web サイトが開始されているかどうかも確認する必要があります。
c:\Inetpub\scripts>adsutil.vbs get W3SVC/1/ServerState
ServerState : (INTEGER) 2
ServerState =
Value Meaning Friendly ID
1 Starting MD_SERVER_STATE_STARTING
2 Started MD_SERVER_STATE_STARTED <-- What you want
3 Stopping MD_SERVER_STATE_STOPPING
4 Stopped MD_SERVER_STATE_STOPPED
5 Pausing MD_SERVER_STATE_PAUSING
6 Paused MD_SERVER_STATE_PAUSED
7 Continuing MD_SERVER_STATE_CONTINUING
したがって、Win32_Service を使用した上記の回答は、サービスが開始されているかどうかを示します。これにより、サービスが実行されているかどうかに加えて、Web サイトが実行されているかどうかがわかります。