お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"子プロセスに自分を殺させる"



 CreateProcessした子プロセスから自分をTerminateさせるためのコード.
Handle を他のプロセスに渡すには DuplicateHandle を呼ばないといけないので
その例です.W2Kで確認


-----------------------------------------------------------------------------
<死にたい人のコード>
uses Windows

var
  SecAttr: TSecurityAttributes;

procedure TForm1.DoXXXX;
var
  Si: TStartupInfo;
  Pi: TProcessInformation;
  Ph: THandle;
  FName: string;
  St: TStringList;
begin
  FName := 'D:\MyApps\ChildApp.exe';
  GetStartupInfo(Si);
  SecAttr.bInheritHandle := True;
  SecAttr.nLength := Sizeof(SecAttr);
  if Windows.CreateProcess( nil,
                            PChar( FName ),   // コマンドラインをそのまま書く
                            @SecAttr, @SecAttr, True,
                            CREATE_DEFAULT_ERROR_MODE,
                            nil, PChar(GetCurrentDir), Si, Pi)
  then begin
    // Pi は子プロセスのinfo,自プロセス内のハンドルを子プロセスに渡すため
    // 継承ハンドルを Ph に得る
    DuplicateHandle( GetCurrentProcess, GetCurrentProcess, Pi.hProcess,
                     @Ph, 0, False, DUPLICATE_SAME_ACCESS );
    // 継承済みのハンドルを子プロセスに渡すのにファイルを使った例
    St := TStringList.Create
    try
      St.Add( InttoStr( Ph ) );
      St.SaveToFile('D:\MyApps\Handle.txt');
    finally
      St.Free;
    end;
  end;
end;
---------------------------------------------------------------------------
<殺し請負をするプロセスのコード>
var
  hProcess: THandle;
  St: TStringList;
begin
  St := TStringList.Create
  try
    St.LoadFromFile('D:\MyApps\Handle.txt');
    hProcess := StrToInt( ProcInfo[0] );
  finally
    St.Free;
  end;
  TerminateProcess( hProcess, 0 );
end;

                                                  TN(CQJ01721)
 


Original document by TN            氏 ID:(CQJ01721)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum