もくじ
https://tera1707.com/entry/2022/02/06/144447
やりたいこと
保存してあるファイルについて、
今すぐは消さない(消せない)けど、次回Windows起動時に、OSに消してもらうということができるらしい。
普通は、アプリは自分自身(exe)を消したりはできないけど、自分自身の削除をOSにお願いしておいて、次回起動時に消してもらう、とかが出来そう。やってみる。
やりかた
MoveFileEx()
関数を使う。
サンプルコード
#include <iostream> #include <Windows.h> int main() { WCHAR Path[MAX_PATH + 1]; // 自分自身のexeのパスを取得 GetModuleFileName(NULL, Path, MAX_PATH); // 次回OS起動時の自分自身の削除をOSに予約する MoveFileEx(Path, NULL, MOVEFILE_DELAY_UNTIL_REBOOT); // 管理者で起動していないとエラーコード5になる std::cout << GetLastError() << std::endl; }
MoveFileEx()
を、下記のようにして呼ぶと、やりたいことができる。
- 第一引数に、次回OS起動時に削除したいファイルパスを入れる
- 第二引数は、NULLにする
- 第三引数に、
MOVEFILE_DELAY_UNTIL_REBOOT
を指定する
■注意
管理者でアプリを実行していないとエラーになる。 その際のGetLastError()のエラーコードは、5(アクセスが拒否されました。)。
管理者で上記を実行すると、次回OS起動時に、そのファイルは消えている。
ただ、まだ試してないが、ネットワーク上のファイルを指定するのはNGっぽい。
https://learn.microsoft.com/ja-jp/windows/win32/api/winbase/nf-winbase-movefileexa
参考
MoveFileExA 関数 (winbase.h)
https://learn.microsoft.com/ja-jp/windows/win32/api/winbase/nf-winbase-movefileexa