win2000,vb6.0
1.1つの画面から帳票のExe(別Exe)をShell起動で2つ呼び出しています。
2.1回目のShell起動で2つのExeが起動されます。(閉じないまま)
3.再度Exeを起動したときにプロセスを閉じています。(タスクにも残っていません)
そしてShell起動を行うと帳票側のExeの多重起動(App.PrevInstance)のチェックで
インスタンスが残っているとエラーになってしまいます。
どのようにしたら回避できるでしょうか?よろしくおねがいします。
> 1.1つの画面から帳票のExe(別Exe)をShell起動で2つ呼び出しています。
この時点で、画面.EXE、帳票A.EXE、帳票B.EXEの、3つの exe が
同時に 1 つずつ起動している状態にある…という理解でよろしいですか?
> 再度Exeを起動したときにプロセスを閉じています
再度Exeを起動したときには、
どのEXEのプロセスを、どのように閉じているのですか?
> インスタンスが残っているとエラーになってしまいます。
それは、どのようなエラーですか?
> (App.PrevInstance)のチェックで
App.PrevInstance の値は、たとえば
-------
Private Sub Command1_Click()
MsgBox App.PrevInstance
End Sub
1. PROJECT1.EXE を起動(これをAとする)
2. A にて、App.PrevInstance をチェック → False
3. PROJECT1.EXE を起動(これはBとする)
4. A にて、App.PrevInstance をチェック → Falseのまま
5. B にて、App.PrevInstance をチェック → True
6. A を終了する。
7. B で、App.PrevInstance をチェック → Trueのまま
8. PROJECT1.EXE を起動(これはCとなる)
9. C にて、App.PrevInstance をチェック → False
-------
のようになるはずですが、その「インスタンスが残っている?」という
状態になる事で、上記とは異なる動作をしてしまう…という事でしょうか?
# B の終了が抜けてました…。
> 8. PROJECT1.EXE を起動(これはCとなる)
↓ [訂正]
8. B を終了し、新たに PROJECT1.EXE を起動(これをCとする)
回答ありがとうございます。
>> 1.1つの画面から帳票のExe(別Exe)をShell起動で2つ呼び出しています。
>この時点で、画面.EXE、帳票A.EXE、帳票B.EXEの、3つの exe が
同時に 1 つずつ起動している状態にある…という理解でよろしいですか?
はい、その通りです。
>> 再度Exeを起動したときにプロセスを閉じています
>再度Exeを起動したときには、
どのEXEのプロセスを、どのように閉じているのですか?
帳票A.EXE、帳票B.EXEを連続で閉じています。
実際には、
-------------
If pstrShellprs <> "" Then
hProcess = OpenProcess(SYNCHRONIZE Or PROCESS_TERMINATE, True, pstrShellprs)
Call TerminateProcess(hProcess, 0&)
Call CloseHandle(hProcess)
End If
If pstrShellprs2 <> "" Then
hProcess2 = OpenProcess(SYNCHRONIZE Or PROCESS_TERMINATE, True, pstrShellprs2)
Call TerminateProcess(hProcess2, 0&)
Call CloseHandle(hProcess2)
End If
・
・
・
for wi_Cnt to 2
If wi_Cnt = 1 Then
pstrShellprs = Shell(ws_Exec, vbNormalFocus)
ElseIf wi_Cnt = 2 Then
pstrShellprs2 = Shell(ws_Exec, vbNormalFocus)
EndIf
next
-----------------
>> インスタンスが残っているとエラーになってしまいます。
>それは、どのようなエラーですか?
既に起動されているとApp.PrevInstanceで判断されてしまいます。
>> (App.PrevInstance)のチェックで
>App.PrevInstance の値は、たとえば
1. PROJECT1.EXE を起動(これをAとする)
2. A にて、App.PrevInstance をチェック → False
3. PROJECT2.EXE を起動(これはBとする)
4. B にて、App.PrevInstance をチェック → False
5. A を終了する。
6. B を終了する。
7. A を起動する。
8. A で、App.PrevInstance をチェック → True
8.にてTrueになってしまうのでその後の動作も思っている通りになりません。
これからまた、調べていきますが何かアドバイスなどでもあれば宜しくお願いします。
> インスタンスが残っているとエラーになってしまいます。
それは、どのようなエラーですか?
> (App.PrevInstance)のチェックで
App.PrevInstance の値は、たとえば
-------
Private Sub Command1_Click()
MsgBox App.PrevInstance
End Sub
1. PROJECT1.EXE を起動(これをAとする)
2. A にて、App.PrevInstance をチェック → False
3. PROJECT1.EXE を起動(これはBとする)
4. A にて、App.PrevInstance をチェック → Falseのまま
5. B にて、App.PrevInstance をチェック → True
6. A を終了する。
7. B で、App.PrevInstance をチェック → Trueのまま
8. PROJECT1.EXE を起動(これはCとなる)
9. C にて、App.PrevInstance をチェック → False
-------
すいません 追記です。
この処理は印刷ボタンの押下時の処理で、
押されるたびにこの処理が流れます。
回答をコピーしたものを途中から削除するのを忘れていました。
見にくくなってすいません。
ツイート | ![]() |