gpt4 book ai didi

powershell - MSBuild-构建后自动部署Windows服务

转载 作者:行者123 更新时间:2023-12-02 23:47:37 25 4
gpt4 key购买 nike

好的,这就是我要做的-

我们有一个Windows服务,并且我们希望在每次成功配置项构建成功后,将该服务自动部署到测试环境中-为此,我们想到了以下方法-

  • 生成Windows Service项目(以及依赖项)
  • 停止Windows服务
  • 将项目输出从输出文件夹复制到Windows服务文件路径
  • 启动服务

  • 但是,当前我在启动和停止Windows服务时遇到问题。

    这是MSBuild片段-
    <!-- TODO: do this using Powershell instead of normal commandline so that it can be executed on remote machines as well -->
    <Exec Command="Net Stop CreditProcessing" />
    <!-- Exec Command="$(PowerShellExe) -NoProfile -Noninteractive -command &quot;&amp;{ Stop-Service CreditProcessing }&quot;" /-->

    <!-- TODO: The destination needs to come from the env variable or rsp file? -->
    <Copy
    SourceFiles="@(WindowsServiceFilesToDeploy)"
    DestinationFiles="@(WindowsServiceFilesToDeploy->'D:\WindowsServices\Credit Processing Service%(RecursiveDir)%(Filename)%(Extension)')" />

    <Exec Command="Net Start CreditProcessing" />
    <!--Exec Command="$(PowerShellExe) -NoProfile -Noninteractive -command Start-Service CreditProcessing" /-->

    我尝试了直接命令行命令和powershell命令。

    A)这是我尝试使用常规命令运行此构建时遇到的问题-服务需要一些时间来启动/停止,并且构建没有等待足够长的时间并报告错误并停止

    “...服务无法启动”。
    “服务未报告错误”

    或有时在停止时

    “无法在当前状态下控制该服务。”

    而如果我们立即检查服务,它将进入“开始”阶段,很快它将进入“开始”阶段。有什么方法可以使构建更加耐心吗?如果直接从命令提示符运行,该命令不会执行此操作。

    B)如果我使用上面的powershell命令(当前在代码段中注释),这就是我们面临的问题-

    它只是在构建日志中打开powershell提示,然后什么也不做

    您能否帮助避免这些问题(至少其中之一)?我认为,如果可行,建议您使用Powershell路线,但我愿意提出建议。

    其他几个问题-
  • 我们想在远程机器上(而不是在进行此CI构建的地方)部署服务(并因此停止并重新启动)-仍然可以做到吗?
  • 是否可以添加一种检查服务是否已经在运行并仅在其运行时才停止的方法?如果它停止了并且我们尝试再次停止,它将给出“服务未启动”错误
  • 最佳答案

    您的启动命令具有以下形式:

    path\to\powershell.exe
    -arg1 -arg2

    换行符表示PowerShell从不接收参数,因此不知道它必须执行 Start-Service命令,也不知道您不希望它是交互式的。它可能只是在等待您告诉它该怎么做。

    检查$(PowerShell)变量,因为它的末尾可能会有换行符。

    关于powershell - MSBuild-构建后自动部署Windows服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13951027/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com