プロが教える店舗&オフィスのセキュリティ対策術

VB.net 初心者です。

VB.net(2008 Express Editionを使用)で
自作exeを作りました。

内容は、
定期的に指定のAccessデータベースにアクセスして、
そのデータの状況によってexeが画面に表示される、
というような簡単なものなんですが、

このソフトが常駐していると、
シャットダウンを選択してもシャットダウンしません。
ログオフも同様です。

ちなみに
常駐時はタスクトレイにアイコンが表示されるように
なっているのですが、
そこからexeを終了してからシャットダウンを行うと
正常にシャットダウン出来ます。

Timerイベントやタスクトレイ関連のイベントは使用していますが、
特に特別なことはしていないのですが・・・

遅くてもシャットダウンされるならいいですが、
まったくシャットダウンされない状況に困っています。

なにか気が付くところや、
指摘などあればお願いしたく思います。

よろしくお願いします。

A 回答 (2件)

    • good
    • 0
この回答へのお礼

お礼が遅くなりました。

お二方の意見を参考に色々試行錯誤してみたのですが、
なかなかうまくいかず、
結局下記の方法で解決するに至りました。

せっかく教えていただいたのに申し訳ありません。
今回教えて頂いた方法については、
もう少し勉強をしてみたいと思います。

ありがとうございました。

※サンプル

Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
If flgClose = False Then
e.Cancel = True
Me.WindowState = FormWindowState.Minimized
End If
End Sub

Private Sub Form1_Closed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed

'タイマーコントロール破棄
Timer1.Dispose()

'タスクトレイ削除
NotifyIcon1.Visible = False
NotifyIcon1.Dispose()
GC.Collect()

End Sub

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
If m.Msg = WM_QUERYENDSESSION Then flgClose = True
MyBase.WndProc(m)
End Sub

お礼日時:2010/02/17 14:49

SystemEvents_SessionEndingイベントを記述したらどうなります?



ログオフやシャットダウンをしようとしている時にイベントを受け取る、またキャンセルする
http://dobon.net/vb/dotnet/system/sessionending. …
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。

http://dobon.net/vb/dotnet/system/sessionending. …
を参考に色々やってみたのですがうまくいきません。

Form1_Load には他にも色々書いてあるので、
一番先頭に
AddHandler SystemEvents.SessionEnding, _
AddressOf SystemEvents_SessionEnding
を記入しました。

Form1_Closed には何も書いていなかったので
そのまま記入したのですが、
Form1_Closingというイベントは別で使用しています。
これは関係ないですか?

また、
Private Sub SystemEvents_SessionEnding( _
ByVal sender As Object, _
ByVal e As SessionEndingEventArgs)

End Sub

もForm1のクラスに書いているのですが、
別の場所に書かなくてはいけないのでしょうか?

あと今思ったのですが、
Form1はタスクトレイに生きているだけではなく、
起動時にMinimizedをして
「開いているけど見えていない」状態にしているのですが、
これも何か関係しているのでしょうか?

お礼日時:2010/02/10 16:05

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