アプリケーションをシャットダウンしてから、実行可能ファイルを削除する必要があります。優先度の低いバッチジョブを開始し、すぐにexeをシャットダウンすることでそれを行っています。より良い方法はありますか?
4 に答える
Windows 95/98/ME を使用していない限り、MoveFileEx は機能します (そうでないことを願っています...)。ただし、exe があったフォルダーを削除することはできません。問題がなければ、Ryan のアドバイスに従ってください。
この記事では、基本的に、やりたいことを行うためのすべての方法を記録しています。
sysinternals のPendMovesおよびMoveFileユーティリティがあります。ドキュメントによると、movefile を使用して、空の宛先を指定することで、次回の起動時にファイルを削除できます。
movefile your.exe ""
このユーティリティは一般的に頑固なマルウェアを削除するために使用されますが、アプリケーションを閉じた後すぐに削除するのか、それとも次の再起動時にのみ削除するのかはわかりません.
このユーティリティはMoveFileEx APIを使用するため、必要に応じてその API を使用して同じ効果を得ることができます。
実行可能ファイルのコードがメモリ内にある限り、それを削除することはできませんが、他にも試すことができる方法がいくつかあります。
- 次の再起動まで削除
MoveFileEx
を延期するように指示することは、インストール/アンインストール コードで通常使用される 1 つの方法です。 - タスク スケジューラを使用して
cmd.exe /c del c:\path\myprog.exe
、今から 60 秒後に実行するようにスケジュールし、成功する可能性があるようにすぐに終了します。 - バッチ ファイルは適切に機能し、実際にはバッチ ファイル自体を削除できます。これは、バッチ ファイルが行間で閉じられているためです。
バッチ ファイル方式を使用している場合は、次のようなことを検討してください。
:loop
ping -n 6 127.0.0.1
del /y %1
if exist %1 goto :loop
del byebye.bat
ここでのコマンドは、Windows の標準コマンドではないping
ため、遅延を挿入するために悪用されています。sleep
このループにより、バッチ プロセスは、実行可能ファイルを実際に削除できるようになるまで時間を待つことができます。
可能なアプローチ
終了時にアプリケーションを削除するスクリプトを起動しますが、これによりスクリプトが放置される可能性があります
RunOnce キーを使用して、次回のマシンの再起動時に実行可能ファイルを削除します。ログオンとログオフにも適用されると思いますが、確かではありません。