Delphi Programming / Object Pascal
[掲載 2007年04月03日] [更新 2015年09月27日] Delphi サンプルプログラム集 |
850_自分自身を削除するプログラム |
動作確認等 |
Windows 7 U64(SP1) + Delphi XE(UP1) Pro |
|
850_DeadSelf.zip [537 KB] 2015年09月27日版 (EXE 同梱) |
- 2015年09月27日
- 空白を含むパス名に対応したコードにした
- Windows 7 U64(SP1) + Delphi XE(UP1) Pro で動作確認
|
起動中のアプリケーションの実行ファイル (EXEファイル) を削除するサンプルプログラムです.このプログラムは,
の各コード同様,バッチファイルを使用しています.このバッチファイルの中に,起動したプログラムを削除するコマンドを挿入しています.
自分自身を削除するために作成したバッチファイルも,自分自身を削除した後に削除します. |
|
図1
設計時画面
|
|
図2
[私を削除] ボタンクリック
|
|
図3
削除後のフォルダ内
- デバッグ中に,EXE を直接起動して削除した場合は,プロジェクトの再構築またはビルドが必要
|
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
uses
ShellApi;
{$R *.dfm}
//=============================================================================
// 手順
// (1) このEXEファイルを削除するバッチファイルをこのフォルダ内に作成
// (2) そのバッチファイルには,自分(バッチファイル)を削除するコードがある
// (3) EXEの削除を確認したら,バッチファイル自身を削除
// (4) このプログラムを終了する
//
// ShellExecuteの使用にはusesにShellApiが必要
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
LExeFullPath : String;
LBatFullPath : String;
LBatCmdList : TStringList;
begin
if DebugHook <> 0 then begin
MessageBox(Handle, 'デバッグ中は削除できません', '情報', MB_ICONINFORMATION);
exit;
end;
LExeFullPath := ParamStr(0);
LBatFullPath := ChangeFileExt(LExeFullPath, '.BAT');
LExeFullPath := AnsiQuotedStr(LExeFullPath, '"');
LBatCmdList := TStringList.Create;
//このEXEファイルを削除するバッチファイル作成
//削除が確認できるまでループする
try
LBatCmdList.Add(':Lbl0');
LBatCmdList.Add('DEL ' + LExeFullPath);
LBatCmdList.Add('IF EXIST ' + LExeFullPath + ' GOTO Lbl0');
LBatCmdList.Add('DEL %0');
LBatCmdList.Add('EXIT');
LBatCmdList.SaveToFile(LBatFullPath);
finally
LBatCmdList.Free;
end;
try
//作成したバッチファイルを実行
ShellExecute(Handle, '', PChar(LBatFullPath), nil, nil, SW_HIDE);
except
end;
Close;
end;
end.
|