Delphi 6 アプリケーションでEOSError 例外、コード 5、アクセスが拒否されますが、別の Windows 7 ユーザー アカウントに切り替えたとき、またはステーションをロックしたときにのみ発生します。スタック トレースを出力していますが、スタックのすぐ下にある Application.ProcessMessages() を使用した Application.Run() ステートメントからエラーが発生しているようです。残りのスタックは、私の例外処理コードです。
操作中、コードは ShellExecuteEx() を呼び出し、COM/ActiveX オブジェクトにアクセスしますが、それはユーザーがボタンを明示的にクリックした場合のみです。これは Windows 7 でのみ発生し、Windows XP では発生しません。ユーザーアプリデータディレクトリに完全にインストールされるようにアプリケーションを変更したため、管理者権限ディレクトリへのアクセスは必要ありません。それが問題ではないことはわかっていますが、念のため指摘しています。
これが発生すると、例外が猛烈に速くなります。私はそれらをトラップしてエラー ログに記録し、大量のダイアログ ボックスでユーザーを悩ませないようにしています。現在ログインしているユーザーから切り替えるか、ロックするだけで、これらのエラーの洪水を引き起こす原因を誰か教えてもらえますか? 現在のユーザー アカウントがアクティブでない場合、アプリで問題が発生するのはなぜですか?
一つの考え。ユーザーが現在ログインしていない場合、一部のビットマップ操作で問題が発生しますか? Windows API ビットマップ操作を継続的に実行してタグ クラウド イメージを更新する、回転するタグ クラウドがあります。それと何か関係があるのでしょうか?
もしそうなら、現在のユーザーが切り替えられたりロックされたりしたときにタグ クラウドを非アクティブ化することもできますが、次のスタック オーバーフローの投稿で言及されているイベントに反応する Delphi 用のコードが必要になると思います。
WPF アプリケーションから Lock This Computer コマンドを検出するにはどうすればよいですか?
更新:追加のテストをいくつか行いました。対話しているソフトウェアである Evernote の COM/ActiveX インターフェイスにアクセスするまで、エラーは発生しません。COM API を介して Evernote への最初の呼び出しを行うと、ステーションをロックするとすぐにエラーが発生します。