C++C#等编程控制IIS进程池

  • Post author:
  • Post category:其他


C++

//C++ adsi,
//引入activeds.lib;adsiid.lib两个库文件
//iis10不支持,报错ADsGetObject() failed. Error 0x80004005
//iis7.5支持

#include <iostream>
#include<initguid.h>
#include<objbase.h>
#include <iads.h>
#include <adshlp.h>
#include <iiisext.h>
#include <iisext_i.c>

int main()
{
    HRESULT hr;
    IADs* pADsPool = NULL;

    hr = CoInitialize(NULL);
    if (FAILED(hr))
    {
        wprintf(L"CoInitialize failed. Error 0x%0x\n", hr);
        return;
    }

    hr = ADsGetObject(L"IIS://localhost/w3svc/AppPools/MyTest", IID_IADs, (void**)&pADsPool);
    if (FAILED(hr))
    {
        wprintf(L"ADsGetObject() failed. Error 0x%0x\n", hr);
        return;
    }

    IISApplicationPool* appPool = NULL;
    hr = pADsPool->QueryInterface(IID_IISApplicationPool, (void**)&appPool);
    if (hr == S_OK)
    {
        //appPool->Stop();
        //appPool->Start();
        appPool->Recycle();
        printf("OK");
    }
    CoUninitialize();
    system("pause");
}

C#

//C# 使用Microsoft.Web.Administration;
//添加引用,浏览,在C:\Windows\System32\inetsrv下选中Microsoft.Web.Administration.dll
//iis7.5可用
//iis10 win10可用,但需要管理权限,直接双击运行无权限,右键管理员运行可以

using Microsoft.Web.Administration;

           ServerManager sm = new ServerManager();

            try
            {
                var pool = sm.ApplicationPools["MyAPP"];

                if (pool == null)
                {
                    Console.WriteLine("pool == null");
                    return;
                }

                if (pool.State == ObjectState.Started)
                {
                    Console.WriteLine("is start, now stop");

                    if (pool.Stop() == ObjectState.Stopped)
                    {
                        Console.WriteLine("成功停止应用池");
                    }
                    else
                    {
                        Console.WriteLine("停止失败");
                    }
                }
                else
                {
                    Console.WriteLine("is stop, now start");

                    if (pool.Start() == ObjectState.Started)
                    {
                        Console.WriteLine("成功启动应用池" + AppPoolName);
                    }
                    else
                    {
                        Console.WriteLine("启动失败");
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message.ToString());
            }

            GC.Collect();
            Console.Read();

C#

//C# 使用System.DirectoryServices 其实也是使用了ADSI的com组件
//iis7.5可用,iis10不可用
//添加引用,程序集,System.DirectoryServices

using System.DirectoryServices;
           try
           {
                DirectoryEntry w3svc = new DirectoryEntry("IIS://localhost/w3svc/AppPools/MyAPP");
                //w3svc.Invoke("Recycle", null);
                w3svc.Invoke("Start", null);
       	w3svc.Invoke("Stop", null);
                Console.WriteLine("执行成功");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message.ToString());
            }
            Console.Read();
//bat脚本控制

cd %windir%\system32\inetsrv
appcmd recycle apppool MyAPP
appcmd stop apppool /apppool.name:MyAPP
appcmd start apppool /apppool.name:MyAPP
或全路径
c:\windows\system32\inetsrv\AppCmd.exe stop apppool /apppool.name:"MyAPP"
c:\windows\system32\inetsrv\AppCmd.exe start apppool /apppool.name:"MyAPP"



版权声明:本文为shellching原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。