3

CI から TopShelf を使用してサービスをインストールしようとしています。ただし、インストール中に例外が発生すると、TopShelf はトランザクションをロールバックしてビルド プロセスを続行し、0x0 ステータスを返します。

これは、CI サーバーに関する限り、展開が成功したことを意味します。

MSBuild で使用しているコマンドの例は次のとおりです。

<Message Text ="Installing Service" />
<Exec Command=""$(MSDeployPath)" -verb:sync -source:runCommand="$(RemoteServicePath) install /instance:$(DeployEnvironment)",dontUseCommandExe=false,waitAttempts=10,waitInterval=10000 -dest:auto,computername=%(ComputerName) -verbose -retryInterval:10000 -retryAttempts:10"></Exec>

私が受け取る出力は次のとおりです。

[Exec] Running a transacted installation. <br>
[Exec] <br>
[Exec] Verbose: Received response from agent (HTTP status 'OK'). <br>
[Exec] Info: <br>
[Exec] Beginning the Install phase of the installation. <br>
[Exec] <br>
[Exec] Info: Installing service Foo...<br>
[Exec] <br>
[Exec] Info: Creating EventLog source Foo in log Application...<br>
[Exec] <br>
[Exec] Info: <br>
[Exec] An exception occurred during the Install phase.<br>
[Exec] <br>
[Exec] Info: System.ComponentModel.Win32Exception: The specified service already exists<br>
[Exec] <br>
[Exec] The Rollback phase of the installation is beginning.<br>
[Exec] Restoring event log to previous state for source Foo.<br>
[Exec] <br>
[Exec] The Rollback phase completed successfully.<br>
[Exec] <br>
[Exec] The transacted install has completed.<br>

例外でビルドを失敗させる方法はありますか?

4

1 に答える 1

1

Topshelf(3.0.2)の最新リリースでは、TopshelfExitCodeが追加されました。これは、(int)にキャストして、コンソールアプリケーションのMainから返すことができる列挙型です。

インストール/アンインストールが失敗した場合、エラーコードはゼロ以外です(列挙にはすべての可能な値があります)。これで、正しくインストールされない場合にゼロ以外の終了コードを期待するバッチファイル/ビルドでうまく機能するはずです。

于 2012-09-21T14:17:12.533 に答える