![Avatar of bphanikumar](https://cdn.experts-exchange.com/images/experts-exchange/avatar-01-large.gif)
bphanikumar
asked on
Start/Stop IIS 6 Services Programatically
How to pragramatically start and stop IIS 6 (windows 2003) services in c++, especially the SMTP/NNTP services? Does the ADSI/WMI api have specific functions related to this?
![Avatar of bphanikumar](https://cdn.experts-exchange.com/images/experts-exchange/avatar-01-large.gif)
ASKER
But I want to do that programatically using the ADSI/WMI APIs in c++. With IIS5 Microsoft delivers the scripts Startsrv.vbs and Stopsrv.vbs but in IIS6 these scripts are not delivered.
To be more specific, programatically find all the services available for IIS6, their current state and able to start & stop each service...
To be more specific, programatically find all the services available for IIS6, their current state and able to start & stop each service...
![Avatar of Sven](https://filedb.experts-exchange.com/files/public/2015/8/15/f04b3fe7-8041-4b50-b1f4-82f2f925dced.jpeg)
I am no C++ programmer, but in VB I programmed a tool which calls the Shell-API and does all work for me. Here are the important parts:
Option Explicit
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Const STILL_ACTIVE = &H103
Const PROCESS_QUERY_INFORMATION = &H400
Private Sub ShellWait(ByVal CommandLine As String, Optional ByVal WindowStyle As VbAppWinStyle = vbHide)
Dim hProcess As Long
Dim RetVal As Long
hProcess = OpenProcess(PROCESS_QUERY_ INFORMATIO N, False, Shell(CommandLine, WindowStyle))
Do
GetExitCodeProcess hProcess, RetVal
DoEvents: Sleep 100
Loop While RetVal = STILL_ACTIVE
End Sub
Private Sub Form_Load()
ShellWait "NET STOP IISADMIN /Y"
ShellWait "NET START IISADMIN"
End Sub
Option Explicit
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Const STILL_ACTIVE = &H103
Const PROCESS_QUERY_INFORMATION = &H400
Private Sub ShellWait(ByVal CommandLine As String, Optional ByVal WindowStyle As VbAppWinStyle = vbHide)
Dim hProcess As Long
Dim RetVal As Long
hProcess = OpenProcess(PROCESS_QUERY_
Do
GetExitCodeProcess hProcess, RetVal
DoEvents: Sleep 100
Loop While RetVal = STILL_ACTIVE
End Sub
Private Sub Form_Load()
ShellWait "NET STOP IISADMIN /Y"
ShellWait "NET START IISADMIN"
End Sub
![Avatar of Ray](https://filedb.experts-exchange.com/files/public/2023/2/9/5ca6e867-1503-41f3-8c67-a34514ab0cf7.png)
Using ADSI to Configure IIS
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iissdk/iis/using_adsi_to_configure_iis.asp
Using WMI to Configure IIS
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iissdk/iis/using_wmi_to_configure_iis.asp
IIS Reference
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iissdk/iis/iis_reference.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iissdk/iis/using_adsi_to_configure_iis.asp
Using WMI to Configure IIS
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iissdk/iis/using_wmi_to_configure_iis.asp
IIS Reference
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iissdk/iis/iis_reference.asp
![Avatar of bphanikumar](https://cdn.experts-exchange.com/images/experts-exchange/avatar-01-large.gif)
ASKER
Using WMI it's easy to configure IIS programmatically. WIM Studio gives extensive information about the classes to be used and other details. But I can't use it for my application. Only ADSI to be used. Most of the sites explain using VBScript examples but rarely with C++/COM. Like for the simple VBScript code shown below how do u write in C++,
IIsObjectPath = "IIS://" & MachineName & "/" & ObjectPath
Set IIsObject = GetObject(IIsObjectPath)
IIsObject.Stop
The code is picked from the adsutil.vbs file.
IIsObjectPath = "IIS://" & MachineName & "/" & ObjectPath
Set IIsObject = GetObject(IIsObjectPath)
IIsObject.Stop
The code is picked from the adsutil.vbs file.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
NET START IISADMIN
You can use NET STOP [service name] /Y for any service that is running, just replace [service name] with the name of the service, you find the name of the service by going to Services..