IISコンパイル後にまだ実行されている場合、シャットダウンするVisual Studioビルド後イベントを実行しています。
taskkill /f /im w3wp.exe
IISがまだ実行されている場合、以下は完全に機能しますが、すでに停止している場合はエラーをスローします。
Error 1 The process "w3wp.exe" not found. xxx\EXEC
一致する実行中のプロセスが見つからない場合に問題を無視するようにtaskkillに指示する方法はありますか?
1つのコマンドを実行する代わりに、小さなバッチファイルを実行する代わりに機能しますか?
tasklist /FI "IMAGENAME eq w3wp.exe" 2>NUL | find /I /N "w3wp.exe">NUL
if "%ERRORLEVEL%"=="0" taskkill /f /im w3wp.exe
私がこれに対して見つけた解決策は実行することでした
START /wait taskkill /f /im w3wp.exe
STARTコマンドから成功を返し、TASKKILLによってスローされたエラーはすべて新しいコンソールウィンドウにスローされます。
これもうまくいきます:
taskkill /IM "w3wp.exe" /F /FI "STATUS eq RUNNING"
これは1行のソリューションです。
プロセスが実際に実行されている場合にのみtaskkillを実行します。それ以外の場合は、実行されていないことを通知するだけです。
tasklist | find /i "w3wp.exe" && taskkill /im w3wp.exe /F || echo process "w3wp.exe" not running.
これは、プロセスが実行されていた場合の出力です。
w3wp.exe 1960 Services 0 112,260 K
SUCCESS: The process "w3wp.exe" with PID 1960 has been terminated.
これは、実行されていない場合の出力です。
process "w3wp.exe" not running.
短い答え:
追加|| exit 0
詳細
私は与えられた正確なケースをテストすることはできませんが、これはうまくいくことがわかりました:
pskill w3wp.exe || exit 0
'||'最初のコマンドが失敗した場合、2番目のコマンドを実行するように言います。 「;」同様に動作するはずです。
さらに、コマンドを完全に無音にするには、次のようなコマンドを使用します。
rem totally silent
rem order matters. Redirect then join
some_cmd 1>nul: 2>>&1
プロセスを強制的に強制終了し(プロセスが実行中の場合)、情報を出力しません。
次のコマンドは正常に動作します。
taskkill /f /im w3wp.exe /t /fi "status eq running">nul
ビジュアルスタジオでの事前構築イベントの場合、これは私にとってうまくいきました:
taskkill /f /im scriptcode.exe 2>nul 1>nul
exit 0
ステータス=実行中のチェックで問題が発生しました。プロセスは存在しましたが、ステータス=実行中ではありませんでした。以前使っていました。