6

私の状況:アセンブリ.NETをGACに展開すると、エラーが発生します(別のプロセスで使用されているため、xxx.dllにアクセスできません)。IISはそれらのdll(アセンブリ)を使用します。

IIS 6.0 Windows 2003を起動するための最良の方法(より高いパフォーマンス、迅速で安全な方法)またはすべての停止方法はどれですか?(C#、. NET 3.5の場合)

オプション、私は思う:

  1. マシンにインストールされているIISを検出します。

  2. Process.Start()コマンドの使用:iisreset /stopおよびiisreset /start

  3. ServiceControllerクラスを使用して「WorldWideWebPublishing Service」(「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. 私が知らない別のオプション?

4

2 に答える 2

5

これらすべてを行う必要はありません。

展開が完了したら、ちょうどiisreset /stopその時を使用すると機能します。iisreset /start

これはかなり迅速で、IIS を安全に再起動できます。

編集:

WiX を使用して、Web サイトと仮想ディレクトリの完全な構成を実行できます。

IIS で Web サイトを作成するための 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

于 2010-08-17T12:50:38.957 に答える
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
    }
}
于 2012-12-24T20:16:51.147 に答える