有没有办法检测IIS是否启用?
我知道如何检查它是否已安装,但我需要知道它是否已安装但未启用。
此外,这可以通过 InstallShield 本地完成吗?通过 .NET 进行检查是可以接受的,因为我们可以编写自定义操作,但如果有 IS 调用,那将是理想的。
感谢任何提示/提示,谢谢
有没有办法检测IIS是否启用?
我知道如何检查它是否已安装,但我需要知道它是否已安装但未启用。
此外,这可以通过 InstallShield 本地完成吗?通过 .NET 进行检查是可以接受的,因为我们可以编写自定义操作,但如果有 IS 调用,那将是理想的。
感谢任何提示/提示,谢谢
要检查服务状态,请使用无处不在的 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;
除了 W3svc 服务之外,您还应该检查网站是否已启动
c:\Inetpub\scripts>adsutil.vbs get W3SVC/1/ServerState
ServerState : (INTEGER) 2
其中服务器状态 =
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 的答案会告诉你服务是否启动,除了告诉你服务是否正在运行之外,它还会告诉你网站是否正在运行。