![](/img/trans.png)
[英]Is it possible to start / stop an application pool or website in IIS programatically?
[英]Stop and Start IIS programatically. Quickly and safe way
我的情況:當我在GAC中部署程序集.NET時,我收到錯誤(無法訪問xxx.dll因為正在使用另一個進程)。 IIS使用這些DLL(程序集)。
哪種方法最好(更多性能,快速和安全)或所有方法停止,啟動IIS 6.0 Windows 2003? (對於C#,.NET 3.5)
選項,我認為:
檢測機器中安裝的IIS。
Process.Start()
使用命令: iisreset /stop
和iisreset /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>
另一個例子見這里:
# 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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.