トップへ(mam-mam.net/)

次回OS起動時に、ファイルを削除したりファイルを移動したりリネームしたりする

検索:

「次回OS起動時に、ファイルを削除したりファイルを移動したりリネームしたりする」

次回OS起動時に、ファイルを削除したりファイルを移動したりリネームしたりするには

MoveFileEx(SrcFile, DestFile, MOVEFILE_DELAY_UNTIL_REBOOT)

回答

以下のように
MoveFileEx API関数を使用する。

ただし、管理者権限で実行する必要がある。
コンパイルした実行ファイルを右クリック⇒「管理者として実行」します。

管理者として実行する別の方法は、[プロジェクトオプション]⇒[アプリケーション]から、実行レベルを「管理者権限が必要」に設定してコンパイルします。

管理者として実行する更に別の方法としてマニフェストファイルを用意して
[プロジェクトオプション]⇒[アプリケーション]⇒[マニフェストファイル]をカスタムに設定して「カスタムマニフェスト」ファイルを指定し、コンパイルします。

ソース

procedure TForm1.Button1Click(Sender: TObject);
begin
  //次回OS再起動時に、この実行ファイル自体を削除する
  MoveFileEx(PChar(Application.ExeName),nil,MOVEFILE_DELAY_UNTIL_REBOOT);

  //次回OS再起動時に、「a.txt」ファイル「b.txt」にリネームする
  //  既にファイルが存在する場合は上書きする
  MoveFileEx(PChar('a.txt'),PChar('b.txt'),
    MOVEFILE_DELAY_UNTIL_REBOOT + MOVEFILE_REPLACE_EXISTING);
end;


マニフェストファイルのサンプル
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="WindowsApplication1" type="win32"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>