2017-12-15 12 views
-2

誰かが以前にこのような質問をしていると確信していますが、回答を見つけることができなかったので、誰かが私を助けることができれば本当に感謝しています。Windowsを再起動するまでコードを実行するには?

私は、奇妙なドライバを持っているいくつかのデバイスを使って作業しています。このドライバは、1つのWindowsセッション中に複数回初期化しようとすると、Windowsをクラッシュさせます。 しかし、1つのセッション中にアプリを終了して何度も再起動することができました。ドライバが既に初期化されているかどうかは、どういうわけか知る必要があります。 今はドライバの初期化後に空の "ゴースト"プロセスを作成しています。 いつでもアプリが再起動されると、このプロセスが存在するかどうかを確認しています。この情報を使って、ドライバを初期化するかどうかを決定します。

このような問題を処理する現在の方法は本当に悪いと思います。 これを処理する他の方法はありますか?

+0

あなたは 'Mutex'をよく知っていますか?単一のインスタンスアプリケーションを作成する方法についての素早くGoogleの検索をしてください。 [ミュート](http://sanity-free.org/143/csharp_dotnet_single_instance_application.html) – MethodMan

答えて

0

純粋なMatlab環境下で複雑な開発作業を行う必要がなく、目標を達成できる少しの回避策を提案します。回避策は、system functionの使用を意味します。オペレーティングシステムを指定していないので、Windowsの下にいるとします。

ドライバを初期化し、初期化日時をどこかに保存します(matアプリケーションフォルダ内のファイル、アプリケーションデータフォルダ内のバイナリファイル、レジストリキーなど...複数の選択肢があり、すべてが良好です)。 -now機能。

次回アプリケーションがドライバを初期化しようとする前に、最後のドライバ初期化日時をレジストリ、ファイル、または使用することを決めたものから回復してください。情報が利用できない場合は、アプリケーションを実行する前にアプリケーションが実行されていないことを意味し、ドライバを安全に初期化できます。それ以外の場合は、前回のオペレーティングシステムの起動時と比較する必要があります。次のようWindowsの下にあなたがこの情報を入手することができます0に等しい

[status,cmdout] = system('wmic os get lastbootuptime'); 

status場合は、cmdout変数は、次のようなものが含まれます:

LastBootUpTime 
20171201163757.330911+060 

解析をその数値の一部を取得するために、コマンド出力。これはdatetime値です。最後に、最後の初期化と前回のブート時の比較を比較します。前者が前者の場合は、ドライバをもう一度初期化する必要があります。

+0

ありがとうございました!私はあなたのソリューションがおそらく最高のものだと考えました。ありがとう、私はそれを使用しようとします。 – wiuwiu

0

これは、前回の再起動後に初期化が実行されたかどうかを確認できるかどうかによって異なります。このドライバは初期化されると何をしますか?アプリケーションが評価できる状態が変わっていますか?

ない場合は、アプリケーションは例えば、どこかでこの状態を設定する必要があります。:

  • あなたが今やっているよう実行中のプロセス、。
  • Windowsレジストリが変更されました。
  • ハードドライブ上のファイルの変更。

Windows起動時にタスクスケジューラを使用して不揮発性の変更を無効にすることができます。

+0

あなたの返信ありがとう!タスクスケジューラはおそらく私が探していたものです。 – wiuwiu

1

まず:
あなたはそれはあなたが少なくとも一度はそれを初期化する意味、「私は回以上、それを初期化しようとする」と述べました。なぜあなたは初期化を行うときにレジストリキーを追加しないのですか?次回は、このレジストリキーの値を確認し、それに応じて再初期化の決定を下します。

2番目:
Windowsのレジストリがオプションでない場合、App Dataフォルダのような場所や、初期化の状態を保存してそれに応じてSQLite dbを持つことができる独自のアプリケーションフォルダがあります。

+0

返信いただきありがとうございます!私はレジストリやデータベースについてはわかりません。レジストリの例を取っ​​てみましょう。 Windowsの再起動後、レジストリフラグはデフォルト値にリセットされないため、アプリケーションは初期化がすでに行われていると思うでしょう。 Windowsに何らかの種類のエンティティがありますか?OSの再起動後に状態がデフォルトに戻りますか? – wiuwiu

+0

私は2番目の答えは私が必要なものだと思う(私はちょうどタスクスケジューラを使用する必要があります)。もう一度答えをありがとう。 – wiuwiu

関連する問題