2

이 좋아 구축 한 후 Windows 서비스를 배포, 이것은 내가 원하는 무엇 -은 MSBuild는 - 자동

우리는 Windows 서비스를 가지고 우리는 모든 성공적인 CI 빌드 후 테스트 환경이 서비스의 배포를 자동화 할 - 이를 위해 우리는 다음과 같은 방법을 생각 -

  • (의존성과 함께) Windows 서비스 프로젝트를 빌드
  • 중지 Windows 서비스
  • 복사 윈도우의 Servi에 출력 폴더에서 프로젝트 출력 CE 파일 경로
  • 시작 서비스

그러나, 현재 내가 Windows 서비스의 시작 및 중지에 대한 문제에 직면하고있다. 내가 직접 명령 줄 모두 노력이 PowerShell을 명령뿐만 아니라 명령

<!-- 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" /--> 

-

이는 MSBuild에서 조각입니다.

A)는이 나는 일반 명령이 빌드를 실행하려고 할 때 직면하는 문제 - 서비스가 시작/중지하는 데 시간이 걸리고 빌드가 충분히 기다리지 않고 오류를보고하고

을 중지

"... 서비스를 시작할 수 없습니다". 때로는

또는 "오류를보고하지 않은 서비스"

중지 "이 서비스는 현재의 상태로 제어 할 수 없습니다."

우리가 즉시 서비스를 확인하면 "시작"단계에 있고 곧 "시작"단계로 이동합니다. 빌드를 만드는 방법은 조금 더 참을성이 있습니까? 명령 프롬프트에서 직접 실행하는 경우 명령이 수행하지 않습니다.

그냥 빌드 로그에 파워 쉘 프롬프트를 열고 다음 단지 아무것도 Build stops at powershell doesn't continue

을한다 -

B)이 내가 위의 PowerShell을 명령 (현재 코드에서 주석)을 사용하는 경우 우리가 직면 한 문제

이러한 문제 (적어도 하나 이상)를 피할 수 있습니까? Powershell 경로가 잘 작동한다고 가정하면 더 좋다고 생각하지만 제안은 할 수 있습니다.

다른 몇 가지 질문 -

  • 우리는 (이 CI 빌드가 발생되는 경우는 제외) 원격 시스템에서 (중지하고 다시 시작 따라서 등) 서비스를 배포 할이 - 어쨌든이 수행 할 수 있습니다 ?

  • 서비스가 이미 실행 중인지 확인하고 실행중인 경우에만 중지하는 방법이 있습니까? 이 중지 우리가 다시 중지하려고하는 경우, 그것은 줄 것이다

+1

$ (PowerShell)을 정의하는 방법을 게시 할 수 있습니까? 스크린 샷을 보며 마치 powershell.exe의 경로 뒤에 개행 문자가 삽입 된 것처럼 보입니다. 이것은 당신이보고있는 행동을 설명 할 수 있습니다. – JohnL

+0

예! 그거였다!! @ JohnL 당신이 답변을 넣어 줄 수 있도록 upvote과 그것을 표시 할 수 있습니까? !! –

+0

done :) 다행스럽게도 도움이 될 수 있습니다. – JohnL

답변

1

출시에 대한 귀하의 명령이이 형식이다 : 그래서 그것은 Start-Service 명령을 실행하는 모르고

path\to\powershell.exe 
-arg1 -arg2 

줄 바꿈이 PowerShell을 인수를 수신하지 않음을 의미하고, 당신이 모르는 돈 대화식이되기를 원합니다. 어쩌면 당신이 무엇을 해야할지를 기다리고있을 것입니다.

$ (PowerShell) 변수를 확인하십시오. 마지막에 줄 바꿈이있을 수 있습니다.

+0

네, 바로 그 문제가 .. 줄 바꿈이라고 생각하지 않고도 다음 줄에 닫기 태그를 넣었습니다. –

1

가 왜 기본 원격 기능이 sc.exe을 사용하여 오류 "서비스가 시작되지?"

+0

재미있는 가능성이 있습니다. - 서비스를 시작하거나 중지 할 때까지 기다리지 않아도됩니다. 멈추는 데 진짜 문제가 발생하면 실패 할 것입니다. 시작 - sc.exe로 가능합니까? –

+0

또한 빌드가 파일을 복사하기 전에 서비스가 멈출 때까지 대기해야합니다. –

+0

확인, 업데이트 - 중지/시작 명령 "/ start sc/stop scps"에 대한/wait 플래그를 사용하여 시도했습니다. A) 위의 (빌드가 충분히 오래 기다리지 않고 단순히 오류가 발생 함) –

관련 문제