我想使用 FAKE 部署一些 Windows 服务。
使用 FAKE 构建脚本部署包后,我使用部署后构建脚本 (*.fsx) 安装服务。
这一切都很好,只是一旦服务启动,文件就会被锁定。这禁止任何进一步的(更新)部署。
是否有可能在 FAKE.Deploy 尝试覆盖文件之前停止服务?
最佳答案
只是不要从 FAKE 解压缩它的目录安装您的服务。
像这样做:
我的项目中的部署脚本:
#r @"c:\Project\FAKE.Deploy\bin\FAKE\tools\FakeLib.dll"
open Fake
open System
open System.IO
let targetDirectory = @"c:\Project\Service"
let runScript file =
if File.Exists file then
let result, messages =
ExecProcessRedirected
(fun info ->
info.FileName <- file
info.WorkingDirectory <- targetDirectory)
(TimeSpan.FromMinutes 10.0)
for msg in messages do
(if msg.IsError then traceError else traceImportant) msg.Message
if not result then
failwithf "MyProc.exe returned with a non-zero exit code"
else
traceImportant <| sprintf "File %s is not found" file
// *** Define Targets ***
Target "EnsureDirectory" (fun () ->
trace <| sprintf " --- Ensure that directory '%s' is exist --- " targetDirectory
CreateDir targetDirectory
)
Target "UninstallService" (fun () ->
trace " --- Uninstall service --- "
targetDirectory @@ "uninstall.bat"
|> runScript
)
Target "CleanDirectory" (fun () ->
trace " --- Clean target directory --- "
CleanDir targetDirectory
)
Target "CopyFiles" (fun () ->
trace " --- Copy new files --- "
XCopy (__SOURCE_DIRECTORY__ @@ "content") targetDirectory
)
Target "InstallService" (fun () ->
trace " --- Install service --- "
targetDirectory @@ "install.bat"
|> runScript
)
Target "Deploy" DoNothing
// *** Define Dependencies ***
"EnsureDirectory"
==> "UninstallService"
==> "CleanDirectory"
==> "CopyFiles"
==> "InstallService"
==> "Deploy"
// *** Start Build ***
RunParameterTargetOrDefault "target" "Deploy"
关于f# - Fake.Deploy 运行自定义 Windows 服务会锁定部署文件并因此更新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27446800/