【问题标题】:Stop and Start IIS programatically. Quickly and safe way以编程方式停止和启动 IIS。快速安全的方式
【发布时间】:2011-03-30 23:14:12
【问题描述】:

我的情况:当我在 GAC 中部署程序集 .NET 时,出现错误(无法访问 xxx.dll,因为正在用于另一个进程)。 IIS 使用这些 dll(程序集)。

哪种方法是最好的方法(更高性能、快速和安全的方法)或所有方法来停止、启动 IIS 6.0 Windows 2003 ? (对于 C#、.NET 3.5)

选项,我认为:

  1. 检测机器中安装的 IIS。

  2. Process.Start() 使用命令:iisreset /stopiisreset /start

  3. 使用 ServiceController 类获取“万维网发布服务”(“W3SVC”) 然后停下来

    controller.Stop();
    controller.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(timeoutSeconds));
    

    然后开始

    controller.Start();
    controller.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(timeoutSeconds));
    
  4. Process.Start() 使用命令:taskkill /IM aspnet_wp.exe /F(在 Win2003 中使用 w3wp.exe)

  5. 我不知道的其他选项?

【问题讨论】:

    标签: .net asp.net iis iis-6 iisreset


    【解决方案1】:

    你不需要做所有这些事情。

    在您完成部署后,仅使用 iisreset /stop 然后使用 iisreset /start 即可。

    它相当快,并确保 IIS 安全重启。

    编辑:

    您可以使用 WiX 对网站和虚拟目录进行完整的配置。

    用于在 IIS 中创建网站的 Wix 示例(不会按原样工作):

    <!--  Create the web site in IIS --> 
     <Component Id="WebSiteComponent" Guid="<INSERT-GUID>" KeyPath="yes">
      <iis:WebAppPool Id="WebSiteAppPool" Name="WebSiteAppPool" RecycleMinutes="1740" QueueLimit="4000" IdleTimeout="20" MaxWorkerProcesses="1" Identity="networkService" /> 
      <!-- web site --> 
       <iis:WebSite Id="WebSiteIIS" AutoStart="yes" ConfigureIfExists="yes" Description="WebSite" SiteId="59" StartOnInstall="yes" Directory="SiteFolder">
       <!--  Host headers to enable web site to be hosted on port 80 --> 
       <iis:WebAddress Id="HostHeader" Header="myWebSite" IP="*" Port="80" Secure="no" /> 
       <iis:WebAddress Id="SecureHostHeader" Header="myWebSite" IP="*" Port="443" Secure="yes" />  
       <!--  download web site web application --> 
       <iis:WebApplication Id="WebSiteWebApplication" AllowSessions="yes" SessionTimeout="20" Buffer="yes" ParentPaths="no" ClientDebugging="no" Name="Default Application" WebAppPool="WebSiteAppPool" DefaultScript="VBScript" ScriptTimeout="90" ServerDebugging="no" /> 
       <iis:WebDirProperties Id="WebSiteProperties" Read="yes" LogVisits="yes" Index="yes" Execute="no" Write="no" AnonymousAccess="yes" AccessSSL="no" Script="yes" AspDetailedError="yes" /> 
       <!--  web service virtual directory --> 
       <iis:WebVirtualDir Id="WebServiceVDir" Alias="Service" Directory="WebServiceFolder">
       <iis:WebDirProperties Id="WebServiceVDirProperties" Read="yes" Write="yes" LogVisits="yes" Index="yes" BasicAuthentication="yes" AnonymousAccess="no" AccessSSL="yes" AccessSSL128="yes" Execute="no" Script="yes" AspDetailedError="yes" /> 
       <iis:WebApplication Id="WebServiceWebApplication" AllowSessions="yes" Buffer="yes" ClientDebugging="no" ServerDebugging="no" WebAppPool="WebSiteAppPool" Name="Default Application" SessionTimeout="20" ParentPaths="no" DefaultScript="VBScript" ScriptTimeout="90" /> 
      </iis:WebVirtualDir>
     </iis:WebSite>
    </Component>
    

    另一个例子见这里:

    http://strangelights.com/blog/archive/2004/10/08/179.aspx

    【讨论】:

    • 如果您只需要回收服务:iisreset /restart。并注意 Win2k8/Vista 和更高版本,这需要来自提升的命令/PowerShell 提示符。
    • 就我个人而言,我会使用 WiX 安装程序来部署文件,它会为我整理所有这些东西,并在我需要时允许快速部署到新服务器。
    • @Richard:任何示例命令/PowerShell? @fletcher:WIX 的任何样本?我使用 Msbuild 脚本进行部署。
    • @alhambraeidos - 当您创建网站或虚拟目录时,Wix 会为您重新启动 iis。它是作为安装过程的一部分完成的。编辑帖子以包含示例
    • @fletcher:对于“万维网发布服务”(“W3SVC”),使用 iisreset 命令比使用 ServiceController 更好?
    【解决方案2】:
    # IISReset.ps1 - using PowerShell
    [array] $services = ('W3SVC','SMTPSVC','IISAdmin')
    foreach($service in $services)
    {
        $tst = Get-Service $service -ErrorAction SilentlyContinue
        if($tst -ne $null)
        {
            Write-Host $service
            Stop-Service -Name $service
        }
    }
    
    [array]::Reverse($services)
    foreach($service in $services)
    {
        $tst = Get-Service $service -ErrorAction SilentlyContinue
        if($tst -ne $null)
        {
            Write-Host $service
            Start-Service -Name $service
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-06-13
      • 1970-01-01
      • 2012-04-15
      • 2017-11-10
      • 1970-01-01
      • 1970-01-01
      • 2015-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多