1

IIS が有効になっているかどうかを検出する方法はありますか?

インストールされているかどうかを確認する方法は知っていますが、インストールされているが有効になっていないかどうかを知る必要があります。

また、これは InstallShield を介してネイティブに実行できますか? カスタム アクションを記述できるため、.NET 経由でこれをチェックすることは許容されますが、IS 呼び出しがある場合はそれが理想的です。

ヒント/ヒントは大歓迎です、ありがとう

4

2 に答える 2

1

サービスの状態を確認するには、どこにでもある 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;

私は IS スクリプト言語についてまったく知らないので、コードはhereおよびhereから借用しました。;-)

于 2008-11-20T10:31:39.110 に答える
1

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 サイトが実行されているかどうかがわかります。

于 2008-11-20T16:23:11.427 に答える