4

「ブートセッションID」または(信頼できる)「ブートタイムスタンプ」はありますか?インストールの場合、スケジュールされた再起動が実際に行われたことを検出する必要があります。

MoveFileEx()でダミーができると思いますが、MOVEFILE_DELAY_UNTIL_REBOOTもっと簡単なことを期待していました。

(修理/更新後に不規則に動作することがあるサードパーティのパッケージをインストールする必要があります。その状態では、デバイスにアクセスするとシステムがロックされる可能性があります)

(Windows XP、Vista、7)

4

4 に答える 4

4

このような場合、WMI(Windows Management Instrumentation)が出発点として適していることがよくあります。現在の稼働時間を直接取得できることはわかっています。これにより、マシンが最近再起動したかどうかを判断できる場合があります。

いくつかのコードサンプルを含むブログ投稿もあります:http: //blogs.technet.com/heyscriptingguy/archive/2004/09/07/how-can-i-tell-if-a-server-has-rebooted。 aspx

実装言語によっては、おそらくvbscriptからクエリコードを引き出したいだけです。

于 2010-01-06T08:51:53.100 に答える
3

どうやらWindowsには「稼働時間」に相当するものがあります。詳細は次のとおりです:http ://support.microsoft.com/kb/555737

私が理解しているように、これはシステムが起動されたのはどれくらい前かを教えてくれるはずです。その情報はあなたの問題を解決しますか?

于 2010-01-06T08:41:23.540 に答える
1

最良の答えはすでにここに示されていると思います。プログラムが最後に実行されてからコンピューターが再起動したかどうかを調べますか?

それが最も簡単な方法のようです。存在するかどうかを確認し、存在しない場合はを使用GlobalFindAtom()して作成しますGlobalAddAtom()。それはあなたのプログラムの実行を超えて持続します。アプリケーションを再度実行し、アトムが存在することを確認した場合、再起動後の最初の実行ではありません。

コンピュータを再起動すると、アトムは存在しなくなります。これは、再起動後、これがプログラムの最初の実行であることを示しています。

于 2011-07-24T00:52:11.810 に答える
1

EventLogソースからイベント6009のシステムイベントログを検索できます。これは、再起動するたびに記録される最初のイベントです。

于 2010-01-06T09:06:22.750 に答える