アプリ版:「スタンプのみでお礼する」機能のリリースについて

VB6.0で作成した実行ファイル(exe)を終了させても
タスクマネージャのプロセスに残ってしまい、
もう一度プログラムを起動することができません。
(プログラムで二重起動防止の処理をしています)

このプログラムをVBのラインタイムが入っていない
マシンで動かしているのですが、
やはりそれが問題なのでしょうか?
それとも別に何か原因があるのでしょうか?

A 回答 (6件)

正常動作ならば、終了させれば プロセスも閉じられます。



VBのランタイムが 入ってない場合、異常終了で、ちゃんと終了してないと思われます。
    • good
    • 0
この回答へのお礼

ありがとうございます。
ランタイムを入れたらちゃんと終了しました!

お礼日時:2003/09/12 11:23

作成した実行ファイル内での処理はどのようなことをしているのでしょうか?


大きな流れで、どのようなことをしているかわかれば適切な回答を得ることが出来るかもしれません。

ちなみに、既に回答されていますがVBランタイムがないとVBで作成された実行ファイルは動作することが出来ません。
    • good
    • 0
この回答へのお礼

プログラムはマスタ保守でした。
ランタイムを入れる前にプログラムは実行したのですが、
やはりOSが関係しているのでしょうかね?
ありがとうございました。

お礼日時:2003/09/12 11:41

Unloadだけでは、オブジェクトが残ってしまう場合があるので


フォームのQueryUnloadで自分自身(フォームオブジェクト)を
破棄するように記述するようにした方が良いです。

メインフォームなら、
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  Set Form1 = Nothing
  End
End Sub

サブフォームなら、
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  Set Form2 = Nothing
End Sub

※Form1、Form2はフォーム名です。
    • good
    • 1
この回答へのお礼

QueryUnloadには特に記述していませんでした。
ここでも破棄するように書いた方がいいのですね・・・
ありがとうございました。

お礼日時:2003/09/12 11:38

フォームやクラスというプログラムの一部を終了(というかアンロード)するだけでなく、


プログラム全体(EXE)を終了するのであれば、
Endステートメントを使えば終了できます。
但し、終了する前に最後の状態を保存する等の処理は少し考えなければいけないと思います。

人によっては推奨しない人もいますが、
私は良くというか絶対使うようにしています。
どこで終了しているか明示的にする為に。

またVBのランタイムが入っていないのであれば、プログラムの実行すらできないと思いますが・・・。
昔のOSであれば入っていない可能性がありますが、
最近のOSでは何もインストールしなくても入っていると思います。
それか知らずに何かのインストーラにてインストールされる事もあると思います。
(ランタイムに関しては推測で自信ありません。)

参考URL:http://www.microsoft.com/japan/msdn/library/ja/v …
    • good
    • 0
この回答へのお礼

Endは私も必ず使うようにしています。

OSはWin2000です。
だからかも知れませんが、プログラムの実行は
できました。
ただ、必要なランタイムが足りなかったみたいです。
どうもありがとうございました。

お礼日時:2003/09/12 11:35

 


フォームモジュールの中で監視、待機等の無限ループを行っている場合、

Unload Me

としてもインスタンスを破棄できず、

DoEvents
Unload Me

で正常に終了できた、という経験があります。(VB6.0)
当然、ループの中にも、DoEventsを入れます。
(いつでも割り込みが入れられるように)

コードの一部を抜粋すると、下記のような要領です。

Option Explicit

Private UnLoadFlg As Boolean

Private Sub cmdEnd_Click()
UnLoadFlg = True
DoEvents
Unload Me
End Sub

Private Sub Form_Activate()
Do Until UnLoadFlg
'監視ロジック(省略)
Call Sleep(50)
DoEvents
Loop
End Sub

Private Sub Form_Load()
UnLoadFlg = False
End Sub
 
    • good
    • 0
この回答へのお礼

今回のプログラムはループさせている
ところはないのですが、勉強になりました。
ありがとうございます。

お礼日時:2003/09/12 11:29

VBで作成したGUIのアプリは、フォームをすべてアンロードすれば終了します。



なので、見えないフォームが残っているんでしょう。
ロードしたフォームをすべてアンロードしていないためです。

自分ではアンロードしたつもりでも、アンロードした後にコントロールのプロパティを見たときに暗黙的にロードされて残ることもあります。
    • good
    • 0
この回答へのお礼

アンロード時にはロードされている
全てのフォームを閉じるようにしていました。
ただ、アンロード後に暗黙的にロードされて残ることも
あることは知りませんでした。
ありがとうございます。

お礼日時:2003/09/12 11:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A