9

いくつかの説明: 私が取り組んでいるプロジェクトでは、バックグラウンドで実行され、ファイルの変更を検出し、変更されたファイルを Web サービスにアップロードして他のユーザーが利用できるようにするプログラムを作成する必要があります。ユーザーが大きなファイルを変更し、編集直後にコンピューターをシャットダウンする場合がなければ、非常に単純な同期です。

アップロードをキャンセルして、次の再起動を待ってアップロードを行うこともできますが、ユーザーが翌朝 Web から別のコンピューターにファイルをダウンロードし、昨夜からの変更がなぜそこにないのか理解できないと想像できます。

そこで私の考えは、ユーザーが Windows をログオフまたは再起動したことを検出し、アップロードの途中である場合は、ユーザーに「Foo.txt変更したばかりのファイルをまだ同期しています。再起動しますか? ? コンピューターを再起動するまで、他のユーザーは変更を利用できません!". ユーザーがノーと言ったら、再起動/ログオフをキャンセルする必要があります

これは可能ですか?

4

3 に答える 3

10

SystemEventsこの動作を公開するという静的クラスがあります。

http://msdn.microsoft.com/en-us/library/microsoft.win32.systemevents.aspx

ただし、特定のアクションを区別することはできず、OS プロセスのタイムアウト ガードを一時停止しません。一度使用しましたが、レジストリで構成されているデフォルトのタイムアウトは少し短いため、増やす必要がある可能性があります。

簡単に言えば、すべてが少しハックな感じがしました。

于 2011-01-06T17:13:58.383 に答える
4

@Adamの回答に追加するには、ログオフとシャットダウン/再起動の違いを伝える必要がある場合は、WM_QUERYENDSESSIONメッセージを処理できます。

Windows Vista のシャットダウンの変更点」は、シャットダウン タイムアウトを理解するのに役立つ記事です。

于 2011-01-06T17:21:22.847 に答える
3

シャットダウンをブロックしようとすることは、最近では損失を伴う命題です。Vista 以降では、これを行うことはできなくなりました。プロンプトを読み取ることも到達することもできません。ここではサービスの使用が強く示され、ユーザーのログオフを乗り切ることができます。再起動すると、サービスが自動的に実行を再開し、ジョブを完了できます。

于 2011-01-06T18:17:54.840 に答える