Pregunta

¿Hay alguna forma de detectar si IIS está habilitado o no?

Sé cómo verificar si está INSTALADO, pero necesito saber si está instalado pero no habilitado.

Además, ¿se puede hacer de forma nativa a través de InstallShield? Verificar esto a través de .NET sería aceptable ya que podemos escribir acciones personalizadas, pero si hay una llamada IS entonces sería ideal.

Cualquier sugerencia / consejo es apreciada, gracias

¿Fue útil?

Solución

También debe verificar si se inicia el sitio web, además del servicio W3svc

c:\Inetpub\scripts>adsutil.vbs get W3SVC/1/ServerState
ServerState                     : (INTEGER) 2

Donde 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

Entonces, la respuesta anterior usando Win32_Service le dirá si el servicio se inició o no, esto le dirá si el sitio web se está ejecutando además de decirle si el servicio se está ejecutando.

Otros consejos

Para verificar el estado del servicio, use el omnipresente WMI (el código es VBScript, solo para darle la idea de la consulta WMI necesaria):

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

EDITAR: trato de hacer un script IS a partir de esto. No me pegue si hay un error de sintaxis.

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;

Código prestado de aquí y aquí , porque sé cero sobre el lenguaje de scripting IS. ;-)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top