2008-11-20 3 views
1

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

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

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

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

+0

Когда вы говорите, что не включен, вы имеете в виду, что при остановке службы? – alexmac 2008-11-20 10:01:12

ответ

1

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

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

Для проверки состояния службы, используйте повсеместного 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 

EDIT: Я пытаюсь сделать 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; 

Код заимствованный из here и here, потому что я знаю о нулевом языке сценариев. ;-)

Смежные вопросы