Ray*_*men 3 f# windows-services f#-fake
我想使用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"
Run Code Online (Sandbox Code Playgroud)