C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[8]: シャットダウン時の処理について


(過去ログ 11 を表示中)

[トピック内 12 記事 (1 - 12 表示)]  << 0 >>

■2236 / inTopicNo.1)  シャットダウン時の処理について
  
□投稿者/ たー (1回)-(2007/03/28(Wed) 10:35:22)

分類:[VB.NET (Windows)] 

お世話になります。

特定のアプリケーションが起動しているときは、シャットダウンできないようにする方法を探しています。

常駐プログラム(サービス)でシャットダウンをフックして、チェックをすればと考えたのですが、

シャットダウンをフックするところは問題ないのですが、チェック部分ではまりました。

cmd.exeでtasklistを実行してチェックしようとしたのですが、シャットダウン中はcmd.exeが使えません(エラーが発生します)

シャットダウン中にcmd.exeを使用する方法をご存知の方いらっしゃいませんか?

よろしくお願いします。

引用返信 編集キー/
■2238 / inTopicNo.2)  Re[1]: シャットダウン時の処理について
□投稿者/ シャノン (114回)-(2007/03/28(Wed) 10:55:53)
シャノン さんの Web サイト
No2236 (たー さん) に返信
> シャットダウン中にcmd.exeを使用する方法をご存知の方いらっしゃいませんか?

cmd.exe を使わずとも、Process.GetProcessesByName でできると思います。

…ところで、シャットダウンを検出してキャンセルしようとしている時点で、
既にいくつかのプロセスはシャットダウンに備えて終了してしまっており、
キャンセルしても、シャットダウンしようとする前と完全に同じ状態とは
限らないのではないかと思うのですが、どうなんでしょうか?
引用返信 編集キー/
■2255 / inTopicNo.3)  Re[2]: シャットダウン時の処理について
□投稿者/ たー (2回)-(2007/03/29(Thu) 09:19:54)
シャノン さん

> cmd.exe を使わずとも、Process.GetProcessesByName でできると思います。

言われてみればそうですね。
サンプルプログラムでtasklistを使っていたので・・・
頭が固かったです。ご指摘ありがとうございます。

> 既にいくつかのプロセスはシャットダウンに備えて終了してしまっており

DBが起動してればOKなので問題なしです。
クライアントでアプリケーションを使っているときに、サーバがシャットダウンしないチェックです。
質問の書き方が悪かったです。すいません。

あとは、ネットワークに接続されているコンピュータ名を取得できれば・・・
いまはnetコマンドで取得してます。

もう少し調べてみます。

引用返信 編集キー/
■2262 / inTopicNo.4)  Re[3]: シャットダウン時の処理について
□投稿者/ 渋木宏明(ひどり) (159回)-(2007/03/29(Thu) 11:09:15)
渋木宏明(ひどり) さんの Web サイト
>>既にいくつかのプロセスはシャットダウンに備えて終了してしまっており
>
> DBが起動してればOKなので問題なしです。

シャットダウンの検知の仕方にもよると思いますが、シャットダウンが開始されたことを検出した時点で、DBが(まだ)起動している保証があるんですか?


引用返信 編集キー/
■2266 / inTopicNo.5)  Re[4]: シャットダウン時の処理について
□投稿者/ たー (3回)-(2007/03/29(Thu) 13:54:55)
渋木宏明(ひどり) さん

>シャットダウンの検知の仕方にもよると思いますが、

まだ調査中ですので・・・プログラムを組んで確認します。
引用返信 編集キー/
■2268 / inTopicNo.6)  Re[5]: シャットダウン時の処理について
□投稿者/ まどか (294回)-(2007/03/29(Thu) 15:21:27)
> >シャットダウンの検知の仕方にもよると思いますが、
>
> まだ調査中ですので・・・プログラムを組んで確認します。

それっぽい名前のイベント風で書くと、
BeforeShutdownProcessじゃないとだめですよね。
ShutdownProcessStartedだとすでにシャットダウンが始まっているわけで
それが任意のプロセス順であればそこで「DBが」という前提は崩れるわけです。
なのでプログラムを組む前の話で、どのタイミングの何を検知できるかにかかっているのではないかと。
引用返信 編集キー/
■2285 / inTopicNo.7)  Re[3]: シャットダウン時の処理について
□投稿者/ はつね (112回)-(2007/03/30(Fri) 01:50:24)
はつね さんの Web サイト
No2255 (たー さん) に返信
>>既にいくつかのプロセスはシャットダウンに備えて終了してしまっており
>
> DBが起動してればOKなので問題なしです。
> クライアントでアプリケーションを使っているときに、サーバがシャットダウンしないチェックです。
> 質問の書き方が悪かったです。すいません。

OSのシャットダウンの場合、DBも当然シャットダウンをする旨の通知を受け取ってシャットダウンのための動作が始まっていますから、「DBが起動していればOK」という前提は非常に危ういものがあります。
シャットダウンをOSがはじめる前段階に割り込んで、そこでDBに接続して「自分以外の!」&「DB自体の」接続プロセスがあったときには、シャットダウンを食い止めるコードを記述することになると思います。

ここで重要なのは、シャットダウンが始まる前に割り込めるかと、シャットダウンを食い止めるには、になります。

また、例えばDBによっては、DBのシャットダウン動作の中でクライアントとのコネクションを切断しない(新しい接続は禁止し、現在の接続がなくなるまで待つ)シャットダウンを記載できるものがあります。もし実現するならば、そういった機能のあるDBを選択する必要があるでしょう。

ただ、どうあがいたとしてもシャットダウンがなかなか終わらないからとリセット押されたり電源ケーブル抜かれたりしたら無駄におわります。


> あとは、ネットワークに接続されているコンピュータ名を取得できれば・・・

とすると、DB以外にOSのネットワーク機能も動いている必要がありますね。

引用返信 編集キー/
■2288 / inTopicNo.8)  Re[4]: シャットダウン時の処理について
□投稿者/ たー (4回)-(2007/03/30(Fri) 09:07:52)
皆さん、ありがとうございます。

> BeforeShutdownProcessじゃないとだめですよね。

イメージはわかるのですが・・・
今はWM_QUERYENDSESSIONイベントをキャッチして判断しています。
WM_QUERYENDSESSIONイベントのちょい前のことですよね。
でもそんなイベントってありました?

アドバイスお願いします。
引用返信 編集キー/
■2290 / inTopicNo.9)  Re[5]: シャットダウン時の処理について
□投稿者/ まどか (295回)-(2007/03/30(Fri) 10:24:05)
ひとつでも拒否の反応があったらシャットダウンを「開始しない」という仕組みではないので
そのDBを含めてすべての関連する集まりが同期して同じを反応をOSに返す必要があるのではと思います。

引用返信 編集キー/
■2291 / inTopicNo.10)  Re[6]: シャットダウン時の処理について
□投稿者/ たー (5回)-(2007/03/30(Fri) 11:14:56)
結論は難しいってことですかね?
クライアント・サーバ環境だったらありそうな事例だったので質問してみました。
まあ、サーバをクライアントが使っていない時間帯にシャットダウンすれば問題なしかな?
引用返信 編集キー/
■2297 / inTopicNo.11)  Re[7]: シャットダウン時の処理について
□投稿者/ シャノン (117回)-(2007/03/30(Fri) 12:30:57)
シャノン さんの Web サイト
No2291 (たー さん) に返信
> 結論は難しいってことですかね?
> クライアント・サーバ環境だったらありそうな事例だったので質問してみました。
> まあ、サーバをクライアントが使っていない時間帯にシャットダウンすれば問題なしかな?

難しいというか不可能に近いですが、技術的な問題もさることながら、そもそも運用で回避すべき問題だったということではないでしょうか。
引用返信 編集キー/
■2299 / inTopicNo.12)  Re[8]: シャットダウン時の処理について
□投稿者/ たー (6回)-(2007/03/30(Fri) 13:47:34)
> そもそも運用で回避すべき問題だったということではないでしょうか。

運用の一言で解決できればよかったんですけど、調べてみないと納得して頂けないですし・・・

調べた結果無理だったってことで、ご勘弁していただこうかと思います。

皆さんありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -