.net - 以编程方式停止和启动 IIS。快速安全的方式

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

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

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

选项,我认为:

  • 检测安装在机器上的 IIS。
  • Process.Start()使用命令:iisreset /stopiisreset /start
  • 使用 ServiceController 类获取“万维网发布服务”(“W3SVC”)
    并停止
    controller.Stop();
    controller.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(timeoutSeconds));
    

    并开始
    controller.Start();
    controller.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(timeoutSeconds));
    
  • Process.Start()使用命令:taskkill/IM aspnet_wp.exe/F(Win2003下使用w3wp.exe)
  • 我不知道的另一种选择?
  • 最佳答案

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

    仅使用 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

    关于.net - 以编程方式停止和启动 IIS。快速安全的方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3502440/

    相关文章:

    c# - MVVM DDD 应用程序中的组合根

    .net - F# Option.None 元组计算为空值元组

    c# - 父控件鼠标进入/离开事件与子控件

    c# - 仅重定向根文件夹 web.config 上的 default.aspx

    asp.net - 图片上传 - 本地主机中断

    azure - 发布完成后 IIS 物理路径发生变化 Azure DevOps

    c# - 无法转换为我的自定义 ConfigurationSection

    asp.net - 如何在.NET 3.5 Web应用程序中安装和使用ASP.NET AJAX控制工具包?

    javascript - 从 javascript 调用 WCF 方法

    asp.net - 云服务上托管的 WebRole 的 Azure D 系列 VM 配置