二重起動がうまくいきません。

解決


Noby  2013-05-05 09:45:00  No: 44506  IP: 192.*.*.*

お世話になります。

Del6ですが、二重起動の防止がうまくいきません。

コードは過去ログDelphiによるWin32APIからコピーしています。

EXEを起動後、再度EXEを起動すると、ShowMessageは表示されますが、

その後、フォームが表示され、二重起動してしまいます。

----------------------------------------
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;
  Mutex: Integer;
implementation

{$R *.dfm}

//二重起動防止コード

begin

//ミューテックスオブジェクトのハンドルを取得する
Mutex := OpenMutex(MUTEX_ALL_ACCESS, False, 'EX_Mutex');

if Mutex <> 0 then
begin

// オブジェクトのハンドルをクローズする
ShowMessage('二重起動は禁止です!');
CloseHandle(Mutex);
Exit;

end;

//ミューテックスオブジェクトを作成する
Mutex := CreateMutex(nil, False, 'EX_Mutex');

Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;

//ミューテックスオブジェクトの所有権を解放する
ReleaseMutex(Mutex);

end.

編集 削除
KHE00221  2013-05-05 10:50:19  No: 44507  IP: 192.*.*.*

ユニットじゃなくてプロジェクトファイル(プロジェクト⇒ソースの表示)
に記述。

もしくは

プロジェクトファイルから
Application.CreateForm(TForm1, Form1);  を削除

編集 削除
Noby  2013-05-05 13:45:11  No: 44508  IP: 192.*.*.*

KHE00221さん

ご親切にありがとうございます。

>ユニットじゃなくてプロジェクトファイル(プロジェクト⇒ソースの表示)
>に記述。

プロジェクトファイルに記述するんですね。

(2重起動のチェックは、プロジェクト全体のことなので

プロジェクトソースファイルに記述するということなんでしょうか・・)

やってみましたら、きちんと動作しました。

ありがとうございました。勉強になりました。

編集 削除