• 締切済み

自作exeを常駐させるとPCがシャットダウン出来ない

VB.net 初心者です。 VB.net(2008 Express Editionを使用)で 自作exeを作りました。 内容は、 定期的に指定のAccessデータベースにアクセスして、 そのデータの状況によってexeが画面に表示される、 というような簡単なものなんですが、 このソフトが常駐していると、 シャットダウンを選択してもシャットダウンしません。 ログオフも同様です。 ちなみに 常駐時はタスクトレイにアイコンが表示されるように なっているのですが、 そこからexeを終了してからシャットダウンを行うと 正常にシャットダウン出来ます。 Timerイベントやタスクトレイ関連のイベントは使用していますが、 特に特別なことはしていないのですが・・・ 遅くてもシャットダウンされるならいいですが、 まったくシャットダウンされない状況に困っています。 なにか気が付くところや、 指摘などあればお願いしたく思います。 よろしくお願いします。

みんなの回答

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.2
chulara
質問者

お礼

お礼が遅くなりました。 お二方の意見を参考に色々試行錯誤してみたのですが、 なかなかうまくいかず、 結局下記の方法で解決するに至りました。 せっかく教えていただいたのに申し訳ありません。 今回教えて頂いた方法については、 もう少し勉強をしてみたいと思います。 ありがとうございました。 ※サンプル 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

回答No.1

SystemEvents_SessionEndingイベントを記述したらどうなります? ログオフやシャットダウンをしようとしている時にイベントを受け取る、またキャンセルする http://dobon.net/vb/dotnet/system/sessionending.html

chulara
質問者

お礼

早速のご回答ありがとうございます。 http://dobon.net/vb/dotnet/system/sessionending.html を参考に色々やってみたのですがうまくいきません。 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をして 「開いているけど見えていない」状態にしているのですが、 これも何か関係しているのでしょうか?

関連するQ&A

専門家に質問してみよう