過去の桐井戸端BBS (桐ver.8)
16528 一括処理のファイルのリンクのアイコンをデスクトップにおいていますが2重起動の禁止はできますか 桑原 修 2002/07/07-11:20
世話になっております。

サーバー上の桐の一括処理のファイルのリンクのアイコンを、端末のディスクトップに置いて、
それをダブルクリックすることで、一括処理を実行するようにしています。

何度もアイコンをクリックすると端末上で桐が2重・3重に起動してしまいます。
これを防ぎたいと思いますが、一括処理で対処できるでしょうか。
(二つ目が立ち上がるとき、一つ目が立ち上がっていることを感知して
その桐を終了させてしまう、など)

よろしくお願いします。


16531 桐の2重起動の禁止はできません 佐田 守弘 2002/07/08-00:39
記事番号16528へのコメント
桑原 修さん
御質問の「桐の二重起動の禁止」ですが、これはできません。

●二重起動と言われる状態について
既に桐が起動している状態で、一括処理のアイコンをダブルクリックすると、
桐のタスクバーがもう1つ作られます。おそらくこの事を「桐が二重起動している」
と言われているのだと思います。

これは桐が二重起動しているのではなくて、新しいタスクバーをもう1つ作っている状態です。
より正しく言えば、起動している桐(メモリに読み込まれたきりのプログラム)は1つですが、
それぞれのタスクバーごとに桐の起動環境が別に作られます。
(起動環境を別に作る事によって、ある程度のメモリは必要としますが)

●桐の動作環境を別に作る場合
既に桐が起動している状態で、表、フォーム、レポートを開いたり、これらのショートカット(アイコン)をダブルクリックした場合には、
現在の桐環境の中でそれらが開かれます。
一方、桐のアイコンをダブルクリックしたり、一括処理を開いたりアイコンをダブルクリックした場合に限っては、
別の桐の動作環境が作られ、同時に別のタスクバーが作られます。これが御質問の状況と思います。

付け加えますと、桐の動作環境ごとに変数の割り当てや、
その他のワーク領域などが別に作られますから、1つの桐のタスクバーで行われている事は、
他のタスクバーの桐の方へは影響しないはずです。
また同じ表を同時に開いた場合には、別ユーザーが共有で開いている状態になると思います。

●一括処理を起動すると、別の桐の動作環境を作る理由
おそらく次の様な理由があって、動作環境を別にしているのだと思います。
一括処理の場合、MS-DOS版からの継承で、開く表番号を指定するなど、一括処理のプログラムの中で全てを決める
といった方法が多かったと思います。
この方法でも、MS-DOS版では同時に1つの一括処理しか起動できなかったので、特に問題はありませんでした。
しかしWindows版の場合、同時に複数の一括処理を実行できるので、既に同じ表番号などが使われていたり、
同じ変数名が使われていると、他方の一括処理に影響を与えるなど、エラーの原因になります。

その様な障害を未然に回避するために、実行する一括処理ごとに独立した桐の動作環境を与えているのではないかと考えます。

●回避
一括処理が終了したら、その一括処理の中から桐を終了するのが良いかと思います。

佐田守弘(KS-00119)


16532 Re:桐システムの2重起動の禁止 Ogo 2002/07/08-07:43
記事番号16528へのコメント

>サーバー上の桐の一括処理のファイルのリンクのアイコンを、端末のディスクトップ
>に置いて、それをwクリックすることで、一括処理を実行するようにしています。
>何度もアイコンをクリックすると端末上で桐が2重・3重に起動してしまいます。
>これを防ぎたいと思いますが、一括処理で対処できるでしょうか。

桐自身の複数起動を禁止するのではなく、
同じシステム( CMD で稼働させる一括処理システムとか、 イベント処理のみを使った WFM から始まるシステムとか)を
複数起動させない方法があります。

桐のシステムを起動するには、通常、 *.CMD や *.WFM をスタートとするはずで、
これのショートカットをデスクトップやスタートメニューの中に作成して、
これを開くことでシステムを稼働することになるはずです。

そこで、その *.CMD や *.WFM を(ショートカットを利用してではありますが)
直接開くことは止めて、間にユーテイリティソフトをかまして、間接的に起動するようにします。

多遊さんのページ http://www2u.biglobe.ne.jp/~s_tanaka/ のダウンロードコーナーに行きます。

http://isweb8.infoseek.co.jp/animal/mokuchan/download/dl-list.htm

で 123 桐他 データベース多重化 システム 「 LoadDB13.LZH 」(up版)

をダウンロードしてみて試して下さい。

これを使う場合、デスクトップやスタートメニューの中に作るショートカットは
この *.Exe ファイルにします。

こうすると、この *.Exe は同一フォルダ・同一名の「 *.Exe 」を2重起動できないようになっています。
(ただし、桐8のシステムを、この *.Exe を使って複数同時稼働させるつもりならば、
説明書記載の設定が事前に必要ですが)。


16533 Re:桐システムの2重起動の禁止 hidetake 2002/07/08-08:48
記事番号16532へのコメント
>http://isweb8.infoseek.co.jp/animal/mokuchan/download/dl-list.htm
>で 123 桐他 データベース多重化 システム 「 LoadDB13.LZH 」(up版)

http://isweb8.infoseek.co.jp/animal/mokuchan/download/file_123.txt
の記載によりますと
>Borland Delphi 6 Personal ( Free Soft by Borland )
LoadDB は Borland Delphi 6 Personal で作られていいるようです.
なお,Borland Delphi 6 Personal はフリーソフトウエアでもありません.

Borland Delphi 6 Personal の使用許諾契約は
http://www.borland.co.jp/products/delphi6_license_jp.pdf
にありますが,

>4.3 DELPHI 6 PERSONAL のみに適用される特別条項
>
>本使用許諾契約の条項に従うことを条件として、お客様は本使用許諾契約に
>基づき本製品を使用し、個人使用のみを目的とした著作物を作成する権利を
>行使することができます。お客様は、本製品または著作物を、商用、業務用、
>政府や企業での使用を目的として(以下「商用目的」)、使用することは
>できません。
>本契約の他の条項に従うことを条件として、お客様はご自身の作成した著作
>物を他人に配布することができますが、直接、間接を問わず、配布や著作物
>の使用に対する報酬を受け取ることはできません。また、お客様が他人に
>配布した著作物は、商用目的で使用してはなりません。
>お客様は、本使用許諾契約に違反して、本製品または著作物を、いかなる
>場合であれ商用目的に使用する場合、又は、他人にかかる使用を許諾する
>場合、その時点における現行の小売価格にて、お客様が保有している
>Delphi Personal のコピー数に相当する数のDelphi Professional のその
>時点における現行バージョンのライセンスを購入することに同意するものと
>します。

もし,使われる場合(使われる方)も,ボーランドの使用許諾契約の内容を確認してからの方が良いと思われます.


16535 Re:桐の2重起動の禁止 うにん 2002/07/08-10:26
記事番号16528へのコメント
>何度もアイコンをクリックすると端末上で桐が2重・3重に起動してしまいます。
>これを防ぎたいと思いますが、一括処理で対処できるでしょうか。
>(二つ目が立ち上がるとき、一つ目が立ち上がっていることを感知して
>その桐を終了させてしまう、など)

適当な場所にフォルダを作れるかどうかチェックして一括処理を継続するか判断します。
一つ目が実行中はフォルダがあるので作成できず、即座に桐を終了させます。
処理の最後でフォルダを削除します。

フォルダ作成 "c:\temp\test",終了状態=&選択件数
条件 (&選択件数<>0) 終了 桐
確認 "実行中"
フォルダ削除 "c:\temp\test"

「確認」の行を実際の処理に置き換えればOK。
桐以外でそのフォルダをうっかり作ってしまわないように注意が必要ですが。
一括処理を置いてある場所にした方がいいかも。

16536 Re:桐の2重起動の禁止 コルネ 2002/07/08-10:38
記事番号16528へのコメント
#1、#ユーザ名、#WSNAME、等の同名でダミーファイル(tbl)を作る。
#2、起動する一括の冒頭で、ダミーファイルを開く。
#3、
if(#ファイル使用("C:\osigoto\miyazawarie\dat\ダミーダイル.tbl",1)=1)
 シェル実行 "C:\osigoto\\miyazawarie\dat\システムメニュ.wfm",表示 = 最大化,&OK
else
メッセージボックス "2重起動","既に 【**システム】 は起動しています。\n[Enter] でこの表示を終了した後、
\n[Alt]+[Tab] でスタートしてください。",アイコン=!,ボタン指定=1,制御文字展開=する,&OK

16546 Re:桐システムの2重起動の禁止 Ogo 2002/07/10-08:45
記事番号16533へのコメント

>もし,使われる場合(使われる方)も,ボーランドの使用許諾契約の内容を
>確認してからの方が良いと思われます.

一応言っておきますが、使用許諾 云々は私と Borland の間での関係であって、
私の作った EXE ファイルを使用するユーザーには
直接の関係もライセンス締結の義務もありません(当然の話)。

従って、一般の桐ユーザーがあの EXE ファイルを使うことに何かの制限があるわけではありません。

# 結局、商業用途を許諾するために私が有料版購入というオチ。

16547 Re:桐の2重起動の禁止 桑原 修 2002/07/10-08:50
記事番号16528へのコメント
皆さん、詳しい説明をありがとうございます。

現在、3学期制の1学期末の成績処理のメンテナンスで時間をとられています。

うにんさんの方法で、やってみようと思っていますが、
ドライブの問題等、もうすこし落ち着いて考えてみます。

結果が出たら、ご報告します。

まずは、お礼まで。

16549 Re:桐の2重起動の禁止 MIT 2002/07/10-11:46
記事番号16528へのコメント
今更投函するほどの内容でもありませんが
本掲示板をご覧になる多くの皆様の参考まで
2重起動の件も含めて私が良くやる手法をご紹介します。
以下の事例は各クライアントが一括処理でスタートする
場合を想定しています。(+がコマンド例)

[クライアント名]・・文字列型
[状況]・・・・・・・整数型
の2つの項目を持つ表を1つ作ります。
仮にこの表をNETとします。

NETは共有フォルダに置きます。

スタート時の一括処理中でNETを共有更新で開き自身が登録されていないか検索します。

+検索 [クライアント名]=#WSNAME

見つからなければ自身を登録します。

+行追加 [クライアント名]=#WSNAME

一括処理の終了時にNETにある自身の行を
削除します。

+絞り込み[クライアント名]=#WSNAME
+条件(#空ファイル=0)行削除*
+絞り込み解除

スタートの一括処理の検索で自身が見つかった時は

・2重起動している
・前回正常に終了していない

いずれかの場合が考えられますので

・一括処理を中止する
・上記にある自身の行を削除する終了処理を実行

の選択ダイアログを表示して判断をユーザーに委ねます。
いずれの場合も一旦は終了させます。

ここまでのお話しで一括処理より起動する場合は2重起動の
有無が確認出来るようになります。
またNETを閲覧すると、現在処理を実行中のクライアント名を
把握する事が出来ます。

次にNETにある整数型項目の使用例を説明します。

1:通常
2:終了
3:起動不可

例えば数字にこんな意味を持たせます。

各クライアントではタイマーイベントなどを利用して
NETを定期的に監視させるようにしておきます。
もし、自身の行の[状況]=2になっていたら
自身を終了させる処理を実行させます。
タイマー時間などにもよりますが、これで遠隔操作による終了ができます。
*これを実現するにはイベント処理が必要です。

起動時に他のクライアントが起動(NETに登録)されていないのを確認後、
自身を登録する時に[状況]=3を登録します。
他のクライアントがスタート時に自身を検索する前にNETの
登録中に[状況]=3が無いか検索し、もしあったら起動を
中止します。
*これは共有する表をバックアップする時などに応用できると思います。

複数の一括処理で成り立つシステムではこれら数字に様々な意味を持たせる
事でクライアントが何を実行中か相互に把握させる事も出来ると思います。

以上、今更の割に不十分な説明かと思いますが、これらは全て桐の世界だけで
実現できる事ですので本当にご参考まで。MIT

16553 Re:桐の2重起動の禁止はできません 野良犬 2002/07/10-21:33
記事番号16531へのコメント
こんばんは。

>これは桐が二重起動しているのではなくて、新しいタスクバーをもう1つ作っている
>状態です。

実行ファイルは1つでも、それぞれ別のプロセスになりますから、2重起動という理解でいいと思います。
 本題に関係なくてすみません。
16554 Re:桐の2重起動の禁止はできません hidetake 2002/07/10-22:01
記事番号16553へのコメント
>実行ファイルは1つでも、それぞれ別のプロセスになりますから、
>2重起動という理解でいいと思います。

私もそう思います.

一括処理を開く場合は,起動オプションで言えば /AO と
一緒の扱いで,別の桐のインスタンスを強制的に起動して処理する事になります,

それから,XP(NT系) を使っていたりすると,タスクマネージャーで
プロセスID 等や使用メモリなど簡単に確認できます.
もっと詳しい情報を知りたければ,ProcessWalker
http://www03.u-page.so-net.ne.jp/tb3/katsu-y/product/pw.htm
等で確認する事もできます.


16603 Re:桐の2重起動の禁止 桑原 修 2002/07/16-00:33
記事番号16549へのコメント
遅くなりましたが、桑原です。
成績処理のメンテナンスは、ほぼ終わり、ちょっと余裕が出てきました。

皆さんのいろいろなアドバイスがありましたが、

MITさんの、方法で行ってみました。


>[クライアント名]・・文字列型
>[状況]・・・・・・・整数型
>の2つの項目を持つ表を1つ作ります。
>仮にこの表をNETとします。
>
>NETは共有フォルダに置きます。
>
>スタート時の一括処理中でNETを共有更新で開き
>自身が登録されていないか検索します。
>
>+検索 [クライアント名]=#WSNAME
>
>見つからなければ自身を登録します。
>
>+行追加 [クライアント名]=#WSNAME

ほぼ、このまま使わせてもらいました。
???????????????????????????????
表 ”\共有\net”,モード=共有更新
 絞り込み [クライアント名]=#WSNAME
   条件 (&選択件数=0) 行追加 [クライアント名]=#WSNAME
??????????????????????????????



終了時は、

>+絞り込み[クライアント名]=#WSNAME
>+条件(#空ファイル=0)行削除*
>+絞り込み解除
??????????????????????????
表 ”\共有\net”,モード=共有更新
 絞り込み [クライアント名]=#WSNAME
   条件 (&選択件数>0) 行削除 *
 絞り込み解除

????????????????????????????



>スタートの一括処理の検索で自身が見つかった時は
>
>・2重起動している
>・前回正常に終了していない
>
>いずれかの場合が考えられますので
>
>・一括処理を中止する
>・上記にある自身の行を削除する終了処理を実行
>
>の選択ダイアログを表示して判断をユーザーに委ねます。
>いずれの場合も一旦は終了させます。

これも、このまま使わせてもらいました。
最初、2重起動しているとき、
すぐに、自身の行を削除し、桐を終了するようにしましたが、
この場合、3つ立ち上がったとき、2つ目の桐が自身の行を削除して、終了してしまうので、3つ目の桐が立ち上がってしまいました。
 そのため、MITさんの通り、選択ダイアログを出すように変えました。

>ここまでのお話しで一括処理より起動する場合は2重起動の
>有無が確認出来るようになります。
>またNETを閲覧すると、現在処理を実行中のクライアント名
>を把握する事が出来ます。
確かに、実行中のクライアントを確認できます。


>次にNETにある整数型項目の使用例を説明します。
>
>1:通常
>2:終了
>3:起動不可
>
>例えば数字にこんな意味を持たせます。
>
>各クライアントではタイマーイベントなどを利用して
>NETを定期的に監視させるようにしておきます。
>もし、自身の行の[状況]=2になっていたら
>自身を終了させる処理を実行させます。
>タイマー時間などにもよりますが、これで遠隔操作による
>終了ができます。
>*これを実現するにはイベント処理が必要です。
>
>起動時に他のクライアントが起動(NETに登録)されていない
>のを確認後、自身を登録する時に[状況]=3を登録します。
>他のクライアントがスタート時に自身を検索する前にNETの
>登録中に[状況]=3が無いか検索し、もしあったら起動を
>中止します。
>*これは共有する表をバックアップする時などに応用できると思います。
>
>複数の一括処理で成り立つシステムではこれら数字に様々な意味を持たせる
>事でクライアントが何を実行中か相互に把握させる事も出来ると思います。

こちらの方は、これから勉強したいと思います。

素晴らしいアイデアありがとうございました。

では

16614 Re:桐の2重起動の禁止 桑原 修 2002/07/16-16:18
記事番号16603へのコメント
桑原です。

>>スタート時の一括処理中でNETを共有更新で開き
>>自身が登録されていないか検索します。
>>
>>+検索 [クライアント名]=#WSNAME
>>
>>見つからなければ自身を登録します。
>>
>>+行追加 [クライアント名]=#WSNAME
>
>ほぼ、このまま使わせてもらいました。
>???????????????????????????????
>表 ”\共有\net”,モード=共有更新
> 絞り込み [クライアント名]=#WSNAME
>   条件 (&選択件数=0) 行追加 [クライアント名]=#WSNAME
>??????????????????????????????

この部分、
表 ”\共有\net”,モード=共有更新
 絞り込み [クライアント名]=#WSNAME
   条件 (&選択件数=0) 行追加 [クライアント名]=#WSNAME,[ユーザ名]=#ユーザ名,[接続日時]=#日時日付(#日時値),[接続時刻]=#日時時刻(#日時値)


と、改良して
 接続したユーザ名、接続時刻も、記録するようにしてみました。

では

戻る