次回のWindows起動時に消してほしいファイルを登録して、消してもらう

もくじ
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