Определить, включен ли IIS - PullRequest
1 голос
/ 20 ноября 2008

Есть ли способ определить, включен ли IIS или нет?

Я знаю, как проверить, установлен ли он, но мне нужно знать, установлен ли он, но не включен.

Кроме того, это можно сделать непосредственно через InstallShield? Проверка этого через .NET была бы приемлемой, так как мы можем написать собственные действия, но если есть вызов IS, то это было бы идеально.

Любые советы / подсказки приветствуются, спасибо

Ответы [ 2 ]

1 голос
/ 20 ноября 2008

Вы также должны проверить, запущен ли веб-сайт, помимо службы W3svc

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 скажет вам, запущена ли служба или нет, но также сообщит вам, работает ли веб-сайт, в дополнение к сообщению, работает ли служба.

1 голос
/ 20 ноября 2008

Чтобы проверить состояние службы, используйте вездесущий WMI (код VBScript, просто чтобы дать вам представление о необходимом запросе WMI):

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. ; -)

...