1

Windows サービスを取得し、プロジェクト ビルドで再作成する必要があります。

プレイベントでは:

sc クエリ "サービス" | findstr /i 実行中 | if "%errorlevel%"=="0" (sc stop "Service")

sc クエリ "サービス" | findstr /i 実行中 | if "%errorlevel%"=="0" (sc delete "Service")

事後イベント:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe $(TargetPath)

ネットスタート「サービス」

しかし、私は次のような問題を抱えています

エラー 1 コマンド "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe D:...\bin\Debug\Host.exe

net start "Service" " コード 2 で終了しました。 ホスト

何か助けてください。

4

3 に答える 3

0

これは私のために働く...

"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe" /u $(TargetFileName)
"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe" $(TargetFileName)
 net start "Replace With Service Name"

これらのコマンドは、ビルド イベントのビルド後のセクションに配置します。

最初の行は、サービスの既存のインスタンスをアンインストールします。サービスが存在しない場合、これは失敗しないため、最初にサービスを照会する必要はありません。また、サービスを停止する必要はありません。アンインストールによって自動的に停止されます。

2 行目は、サービスをインストール/再インストールします。

3 行目でサービスを開始します。これをファイル拡張子のないサービスの名前に変更してください。

お役に立てれば。

于 2016-02-23T22:09:29.537 に答える
0

ビルド イベントのスクリプトは実際にはシェル スクリプトにすぎないことを忘れないでください。したがって、[二重] 引用符で囲まないと、パス (またはアセンブリなど) 内のスペースが台無しになります。

私がしていることは、シェルでマクロ ${TargetPath} などを使用し、展開されるコマンドを正確に入力して、最初にそれが正しいことを確認することです。スペースの問題が解決したかどうかを確認する場所があります。

VS インターフェイスが多くの具体的なフィードバックを提供しないことに同意しますが、公平を期すために、実際には、シェルに分岐し、すべての行が終了した後にシェルが返すものを表示するだけです。

そのため、1 行のエラーレベル (VS への「終了コード」) は、最後に要約エラーレベルのために投げられます。

プロジェクトルートに配置した2つのバッチファイルを次に示します。「新しい場合はコピー」してディレクトリを出力し、コマンドラインで実行します。

.\startDeploy.bat

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe SomeService.exe
net start "Some Server"

...と...

.\stopDeploy.bat

net stop "Some Server"
    C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe /LogToConsole=true /u SomeService.exe

より良い方法がある場合は (sc の使用が気に入っています)、すすぎ、泡立て、繰り返します。問題がないことを確認したら、[ビルド イベント] ウィンドウに変換します。展開する準備が整うまで、これは行いません。

于 2014-01-12T15:06:14.153 に答える