以前に、EXE自分自身を削除するプログラムを作ることがあって、
いろいろ見つけたサンプルを元に FILE_FLAG_DELETE_ON_CLOSE
を試行錯誤してみたが、うまくいかなかった。
(例) 98系と2000系で挙動が違う (すまん、どう違ったかは覚えてない)
(例) EXEがネットワークドライブ上だとうまくいかない

で、結局、俺は以下のようにした。
(1) 削除用プログラム(自分自身)を「<GetTempPath()のディレクトリ>\DeleteMe.tmp」にコピー
(2) (1)をMoveFileEx( MOVEFILE_DELAY_UNTIL_REBOOT )で削除予約。
(3) (1)をCreateProcess()、自分自身は終了。

(1)はユーザーがリブートするまで消えないが、ユーザーの目に触れなきゃOK!