8
A
回答
5
我通常使用直PowerShell或MSBuild的。我儘量避免片狀的msdeploy。 在MSBuild的,你可以這樣使用非常方便的MSBuild擴展包,所以假設你可以將文件複製到目標位置(的Robocopy是非常方便的是)這將做休息:
<Project ToolsVersion="4.0" DefaultTargets="InstallService" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask AssemblyFile="..\packages\MSBuild.Extension.Pack.1.2.0\lib\net40\MSBuild.ExtensionPack.dll"
TaskName="MSBuild.ExtensionPack.Computer.WindowsService"/>
<PropertyGroup>
<MachineName Condition="$(MachineName)==''"></MachineName>
<ServiceName Condition="$(ServiceName)==''"></ServiceName>
<ServicePath Condition="$(ServicePath)==''"></ServicePath>
<User Condition="$(User)==''"></User>
<Password Condition="$(Password)==''"></Password>
<SuppressStart Condition="$(SuppressStart)==''"></SuppressStart>
</PropertyGroup>
<Target Name="CheckProperties" BeforeTargets="StopService">
<Message Text="MachineName: $(MachineName)"/>
<Message Text="ServiceName: $(ServiceName)"/>
<Message Text="ServicePath: $(ServicePath)"/>
<Message Text="User : $(User)"/>
<Message Text="SuppressStart : $(SuppressStart)"/>
</Target>
<Target Name="StopService" BeforeTargets="InstallService">
<MSBuild.ExtensionPack.Computer.WindowsService
TaskAction="CheckExists"
ServiceName="$(ServiceName)"
MachineName="$(MachineName)">
<Output TaskParameter="Exists" PropertyName="DoesExist"/>
</MSBuild.ExtensionPack.Computer.WindowsService>
<MSBuild.ExtensionPack.Computer.WindowsService
TaskAction="Stop"
ServiceName="$(ServiceName)"
MachineName="$(MachineName)"
Condition="$(DoesExist)=='True'">
</MSBuild.ExtensionPack.Computer.WindowsService>
</Target>
<Target Name="StartService" AfterTargets="InstallService">
<MSBuild.ExtensionPack.Computer.WindowsService
TaskAction="CheckExists"
ServiceName="$(ServiceName)"
MachineName="$(MachineName)">
<Output TaskParameter="Exists" PropertyName="DoesExist"/>
</MSBuild.ExtensionPack.Computer.WindowsService>
<MSBuild.ExtensionPack.Computer.WindowsService
TaskAction="Start"
ServiceName="$(ServiceName)"
MachineName="$(MachineName)"
Condition="$(DoesExist)=='True' And $(SuppressStart)=='False'"
RetryAttempts="20">
</MSBuild.ExtensionPack.Computer.WindowsService>
<Message Text="Service $(ServiceName) set not to start" Condition="$(SuppressStart)=='True'" Importance="High" />
</Target>
<Target Name="InstallService">
<PropertyGroup>
<ServiceExeExists Condition="Exists('$(ServicePath)')">True</ServiceExeExists>
</PropertyGroup>
<Message Text="Installing $(ServicePath) %(ServiceName.Identity)" Importance="high"/>
<MSBuild.ExtensionPack.Computer.WindowsService
TaskAction="CheckExists"
ServiceName="$(ServiceName)"
MachineName="$(MachineName)">
<Output TaskParameter="Exists" PropertyName="DoesExist"/>
</MSBuild.ExtensionPack.Computer.WindowsService>
<Message Text="Installed $(ServiceName) $(ServicePath) for $(User) and $(Password)" Importance="high"/>
<MSBuild.ExtensionPack.Computer.WindowsService
TaskAction="Install"
ServiceName="$(ServiceName)"
User="$(User)"
Password="$(Password)"
ServicePath="$(ServicePath)"
MachineName="$(MachineName)"
Condition="!$(DoesExist)"/>
<MSBuild.ExtensionPack.Computer.WindowsService
TaskAction="SetAutomatic"
ServiceName="$(ServiceName)"
MachineName="$(MachineName)"
Condition="!$(DoesExist)"/>
<Warning Text="%(ServiceName.Identity) service already exists" Condition="$(DoesExist)"/>
</Target>
</Project>
1
我們使用這樣定義的msdeploy包:
<sitemanifest>
<runCommand path='presync.cmd' waitInterval='30000'/>
<dirPath path='$winSvc' />
<runCommand path='postsync.cmd' waitInterval='30000'/>
</sitemanifest>
的presync.cmd
:
net stop Svc
installUtil /u /name=Svc $destPath\Svc.exe
的postsync.cmd
:
installUtil /name=Svc $destPath\Svc.exe
net start Svc
所有文件都通過PowerShell腳本生成的。
+0
什麼,如果等待時間不夠了嗎? – marko
+0
http://technet.microsoft.com/en-us/library/ee619740(v=ws.10).aspx –
相關問題
- 1. 團隊城市部署工件到外部服務器
- 2. 無法從團隊城市部署web應用程序
- 3. 團隊城市 - 內部編號爲
- 4. 多級部署的團隊城市最佳實踐是什麼?
- 5. 團隊城市從9.16升級到10
- 6. 詹金斯從團隊城市餵養
- 7. 從團隊城市運行NUnit測試
- 8. 團隊服務構建Windows服務到部署文件夾
- 9. 團隊城市郵政建設事件導致團隊城市建設失敗
- 10. Visual Studio團隊服務部署到onpremise
- 11. Xamarin.iOS團隊城市服務器構建步驟
- 12. 無法連接到團隊城市服務器
- 13. 在團隊城市生成服務器上編譯ASP.NET MVC2
- 14. 在團隊城市服務器上安裝nuget
- 15. 從外部位置向團隊城市添加項目
- 16. package.json版本和團隊城市
- 17. 團隊城市git push掛起構建
- 18. 用戶的團隊城市觸發
- 19. ASP.NET 5團隊城市測試xunit.runner.dnx
- 20. 團隊城市的xUnit插件
- 21. 創建團隊城市構建模板
- 22. 團隊城市和批處理文件
- 23. 團隊城市模板和工件
- 24. 團隊城市構建代理
- 25. 團隊城市輸出db腳本
- 26. 團隊城市多個項目構建
- 27. 如何查看團隊城市版本
- 28. 團隊城市模板丟失
- 29. 團隊城市配置設置
- 30. 在團隊城市中禁用標籤
沒有太多的經驗與msdeploy(使用它幾次,但從來沒有真正理解它是如何工作的「在引擎蓋下「),我必須承認我也覺得它有點片狀。然而,這只是意見,但我最終使用了帶有複製命令和幾個bat文件的msbuild。你的解決方案似乎更強大,但是當你說自己某種文件共享訪問時需要。 在我們的案例中,我們做到了!所以這個解決方案的工作原理和我將它標記爲答案。 您是否知道「卸載服務」或「停止服務」會等待服務正常停止多久?永遠? – marko
您好Marko很高興我可以幫助,從在線文檔http://www.msbuildextensionpack.com/help/4.0.8.0/index.html它說,retryattempts屬性默認爲60。 –