PB 電子会議室

コメント

発言No. 更新日 題名(クリックすると発言内容と関連するコメントが表示されます)
1719 98/06/08 11:16:27 RE(4):PB6: NT or 95:EXEの多重起動防止(FindWindowAは使えない・・・) By Air Hawk
1715 98/06/08 10:30:03 RE(3):PB6: NT or 95:EXEの多重起動防止(FindWindowAは使えない・・・) By こてちゅ
1697 98/06/05 13:14:35 RE(2):FindWindowAでもできます。しかし・・・ By かじ
1691 98/06/05 11:06:44 RE(1):FindWindowAでもできます。しかし・・・ By あすかちゃんの父
1677 98/06/04 18:12:46 PB6: NT or 95:EXEの多重起動防止(FindWindowAは使えない・・・) By こてちゅ

カテゴリ:旧電子会議室
日付:1998年06月08日 11:16 発信者:Air Hawk
題名:RE(4):PB6: NT or 95:EXEの多重起動防止(FindWindowAは使えない・・・)

こんにちは。

>自己レスです。

>むちゃくちゃ邪道なやり方ですが、方法がありました。

こんな方法はいかがでしょう。

アプリケーションの Open イベントに

long l_fno

if FileOpen(\"$$$tekito.$$$\") = -1 then
l_fno = FileOpen(\"$$$tekito.$$$\", LineMode!, Write!, LockWrite!)
FileClose(l_fno)
else
MessageBox(\"開始エラー\", \"既に起動しています\", StopSign!)
halt
end if

Open(w_XXXX)

アプリケーションの Close イベントには

FileDelete(\"$$$tekito.$$$\")

てな感じです。
まあこのままではテンポラリファイルがアプリケーションを起動するディレクトリに
できてしまうので、実際にはテンポラリファイル名をインスタンス変数にでもして、
初期値としてテンポラリディレクトリ内のファイル名(絶対パス)を指定すればよいと
思います。

弱点としては、
  ・テンポラリファイルを消されたら判定できない
  ・アプリケーションが途中でエラー終了したら、次回起動前にテンポラリファイル
    を削除しなければならない
ことでしょうか。

FileOpen 関数のヘルプでは、存在しないファイルを指定すると新しく作成されると
ありますが、どうやらこれは Write! モードのときだけのようです。C の関数とか
も同様の動きをするので、おそらくヘルプの不具合なのでしょう。

付加情報:

PowerBuilder Version (記載なし)

Client SoftWare

OS (記載なし)
DBMS (記載なし)
Browser (記載なし)

Server SoftWare

OS (記載なし)
DBMS (記載なし)
WebServer (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.