OSの起動完了を検知するには


eniac  2010-08-25 18:06:30  No: 147142  IP: [192.*.*.*]

8/24の質問とほぼ同内容ですがお許し下さい。
出来る事なら8/24の質問を削除したいのですが。
題名が質問内容と変わってしまったので、
改めて質問させていただきます。
vb.netにてOS起動完了を認識する事はできるでしょうか?


USBメモリを刺しっぱなしでPCに電源を投入すると、
スタートアップに登録されているUSBメモリ認識アプリが
USBメモリを認識できません。

OSが立ち上がり切れていないため、認識できないようです。
USBメモリ認識アプリ起動後、ツールバーにUSBのインジケータが
表示されている事から、
スタートアップ→USBメモリ認識
となっているようです。

これを解消し、スタートアップでメモリを認識させたいです。
そこで、OS起動完了時にUSBメモリ認識アプリを実行したいのですが、
.netでOS起動完了を検知する事ができますでしょうか?

スタートアップでアプリを起動し、アプリ内部でOS起動完了を待ってから、
実処理に移ろうと考えてます。vbでOS起動完了を検知したら次の処理に
移るという記述をしようと考えています。

このような事が可能でしょうか?

編集 削除
オショウ  2010-08-25 21:23:51  No: 147143  IP: [192.*.*.*]

何を以ってOS起動完了とするか・・・
システムサービスの遅延起動もありますし、処理が重い機能のものが
あれば、CPU負荷はなかなか軽くならない。

USBのデバイス認識を行うと、そのイベントが発生しますので、そ
れを取得して・・・と言うのもありますが、アプリの起動が必ずその
USBデバイスの認識前だとは言えないので・・・

よって、SetupAPI関連の機能を使ってデバイスを列挙し、目的のもの
が認識されるのを待つような仕組みが必要ではないですか?

以上。参考まで

編集 削除
eniac  2010-08-26 14:03:05  No: 147144  IP: [192.*.*.*]

オショウ様、ありがとうございます。

OS起動完了の定義は自分ではしっかりしていません。
すいません。OS起動完了していれば、当然、USBも認識
しているだろうくらいにしか考えていなかったので。
厳密に言えば、USBの有無を確認完了のタイミングというのが
知りたいです。
USBの有無を確認してから、USB認識アプリを起動したいのです。

システムサービスの遅延というのは、意図したカスタマイズ
による物でしょうか?
XpEmbeddedなので特殊なのかもしれませんが、起動に関してはカスタマイズ
しておらず、ごく一般的な起動をするものと考えてます。

説明不足だった点を、補足させて下さい。
USB認識アプリは、
①USBメモリを認識しなかったら、Aアプリを呼び出す。
②認識した場合、USB認識アプリのフォームを表示し続ける。
という機能を実現する物です。

せっかくのアドバイスで申し訳無いのですが、
目的の物が認識されるまで待つとしてしまうと、
②が実現できなくなってしまいそうです。

編集 削除
eniac  2010-08-26 14:06:23  No: 147145  IP: [192.*.*.*]

上の発言ですが、
『②が実現できなくなってしまいそうです。』
ではなく、
『①が実現できなくなってしまいそうです。』
の間違いです。
すいません。

編集 削除
オショウ  2010-08-26 14:26:24  No: 147146  IP: [192.*.*.*]

Embededですか・・・一番厄介でもあり、環境のセットアップ
では、融通がきくものでもあり・・・

まずUSBに認識は、BIOS側とOS側に分かれます。
タイミングは、CPU負荷にも左右され、特にOS起動時は
不安定です。

よって、極論を言うと・・・
※私がやった手法ですので、いかなる環境でもOKではありません。
システムサービスで一番遅く立ち上がるものを見定め、スタート
アップに登録した独自アプリが起動した時点で、そのサービスが
起動していれば、ほぼOSの起動は終わりつつあると推測。
そこから一定時間待ってからデバイス検索を行い、目的のものが
認識されていたら・・・
と言う順序です。

もっと確実に行うなら、スタートアップにアプリを登録するので
はなく、システムサービスに遅く立ち上がるであろうサービスに
依存関係を持たせた独自サービスを作り稼働させ、同様の行為を
行わせ、サービス側からデスクトップに指定にアプリを起動させ
る。と言う方法もありかと。

私は、後者のシステムサービスで行っています。

因みに、ちゃんと作ると、WinXP/VISTA/Win7でも、同様にサービス
側からデスクトップにアプリ起動ができます。

以上。参考まで

編集 削除
ラスク  2010-08-26 16:48:59  No: 147147  IP: [192.*.*.*]

> USB認識アプリは、
> ①USBメモリを認識しなかったら、Aアプリを呼び出す。
> ②認識した場合、USB認識アプリのフォームを表示し続ける。
> という機能を実現する物です。
このアプリは①の状態の時にUSBメモリを挿したら
②になってくれるの?
逆に②の状態で抜いたら①になってくれるの?

なるんだったらOS起動とか関係ないよね。
その瞬間に認識できるかどうかだけの条件で表示を
切り替える事になるから。

切り替わらないんだったら、アプリとして実行時エラー
続出して使えないんじゃないの?「ネットワークに接続
されていません」アイコンのイメージで捉えてるんだけど。

編集 削除
eniac  2010-08-26 18:19:47  No: 147148  IP: [192.*.*.*]

オショウ様ありがとうございます。

前者の方法で検討しております。
設定ではなく、アプリの上書きなどの方が、手軽で
自分以外の人間にも対策してもらい易いためです。

alg.exe、ファイアウォールを立ち上げているサービス?
が結構遅めに立ち上がってるようなので、このサービス
から一定時間sleepさせてから実処理を行おうかと検討しております。

ラスク様ありがとうございます。

説明不足です。申し訳無いです。
①で、Aアプリを立ち上げると同時にUSB認識アプリは自分を落とします。
USBメモリが刺しっぱなしで起動されたかどうかを判定したいです。

編集 削除