C言語で、自分自身を削除するプログラムは可能でしょうか?
バッチファイルを生成してそれを走らせると、やっぱり、
「別のプロセスが使用中です。」と出て、元のexeを削除はできませ
んでした。何か良い方法があれば教えてください。
答え:
以前やったのですが、よく覚えてないので概要だけ。
自分のプロセスでなければ大丈夫ってことですから、
別のプロセスをforkして、親プロセスの停止後(するぐらいまで待って?)
子プロセスのほうで削除するコマンドを発行。
てなことをしていたような気がします。
補足の質問:
windowsですので、forkの代わりに、CreateProcessを使うと
うまくいきました。ありがとうございました。この質問・回答は役に立ちましたか?
答え:
他のOSでは知りませんが、Windowsでは実行中のプログラムを削除することはできません。そのため、自分自身を削除するには、そのプログラムがすでに終了している必要があります。
店やネットに出回っている大体のプログラムはWindowsのアンインストールに任せていたり、利用者がプログラムを手動で削除するようヘルプに書いてあったりします。
その他の削除方法として、レジストリの
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
を利用する方法が考えられます。ここにコマンドを入れておくと、次回のWindows起動時にのみ、そのコマンドが実行されます。そのため、ここにプログラムを削除するコマンド(del *.exe)を入れれば次回起動時にプログラムが削除されます。
ただ、最後の方法はあくまで「可能だ」というだけであって、誰かに配布するなら他のソフト作者と同じように、アンインストールプログラムか、手動削除にするほうが良いと思われます。
ウェブサイトのユーザーによる情報ポスト、JPQA.comのない保証の正しさ.