実行可能ファイルへのWindows 7アクセスが拒否されました。


14

Windows 7の使用を開始して以来、この問題に悩まされてきました。時々、その他のフォーラムに同様の質問が表示されますが、答えが表示されませんでした。ほぼ常にそれを再現する2つのシナリオを次に示します。

探検家の方法

  1. エクスプローラーで、少なくとも1つのexeファイルを含むディレクトリに移動します
  2. すぐに1つのディレクトリに移動する
  3. 移動したばかりのディレクトリを削除します
  4. 収量は、フォルダのアクセスが拒否されまし示すダイアログあなたはこのフォルダに変更を加えるために、管理者の許可を必要とし、このアクションを実行する権限を必要とするボタンがと、再試行してくださいキャンセル
  5. [ 再試行]を押してもすぐには機能しません。1分ほど待ってからもう一度クリックすると機能します

注:ステップ2で、1つのディレクトリに移動する前に1分以上待機している場合、問題は発生せず、フォルダを削除できます。

Visual Studioの方法

  1. exeファイルを生成するプロジェクトをビルドします
  2. 実行可能ファイルを実行してから閉じます
  3. すぐにプロジェクトを再度ビルドします(たとえば、ソースファイルの単一の文字を変更することによって)
  4. 収量致命的なエラーLNK1168:書き込み用に開くことができません/path/to/the.exe

注:ステップ2で、1分以上待ってから再度ビルドする場合、問題は発生しません。

いくつかの仕様

  • VS2008 / 2010/2011で、Windows 7 32ビットと64ビットの両方で発生します
  • 3つの異なるマシンで発生します
  • ウイルススキャナーがありません
  • 多数のサービスを無効にしていますが、Windowsの正常な実行を妨げるものはなく、UACも無効になっています
  • あらゆる種類のディスクで発生します
  • 常に管理者グループに属するユーザーアカウントを使用します

明らかに、両方のシナリオは非常に似ており、非常に再現性があります。そのため、何らかのプロセスで何らかの理由でファイルを開いて、後で再びリリースする必要があると考えました。ただし、sysinternalsを使用する

handle -a

問題のexeファイル表示されません。(これが正しいハンドルの使用方法ですよね?)したがって、explorer / VSがファイルにアクセスできないと報告している間、handle.exeはどこでも使用されていないと言います。これはかなり無知なので、誰かが解決策を思い付くことができるかどうか疑問に思っています。

質問に答えて更新ます

  • セーフモードで問題を再現できませんでした
  • 多数のシェル拡張機能がインストールされます。SellExViewからは、すべてのマシンに共通のMicrosoft以外のものがあります:NitroPDF、WinRAR、TortoiseGit、TortoiseSvn、NVidia。Tortoiseのものが最も疑わしいと思いますが、両方の[ステータスキャッシュ]オプションが[1つのフォルダーのステータスキャッシュのみ、再帰的オーバーレイなし]に設定されています。つまり、TortoiseCache.exeが実行されていません。
  • エクスプローラーの問題により、ProcessExplorerは実行可能ファイルを表示しません。ただし、実行可能ファイルのディレクトリは表示されますが、削除された後も表示され続けるため、実際には関連していないようです
  • VSの問題では、ターゲットディレクトリでエクスプローラウィンドウが開いていない場合でも、VSで発生します。繰り返しますが、ProcessExplorerは実行可能ファイルも実行可能ファイルのディレクトリも表示しません。VSのこの「モード」では、実行可能ファイルを実行しているときにのみ問題が発生することに注意してください。実行していない場合、何度も問題なくビルドできます。
  • 「VSモード」および実行可能ファイルのディレクトリで開かれたエクスプローラーウィンドウ(C#exeのみでテスト)では、奇妙になります:VSが別のプロセスで使用されているとVSが不平を言っているので、再びビルドできません。ただし、開いているエクスプローラウィンドウからexeを削除すると、これは機能し、結果としてビルドは成功します。繰り返しになりますが、ProcessExplorerの参照は一切ありません。どちらが私の調査結果をhandle.exeと一致させるようです(PEとハンドルはいずれにしても内部的に同じAPIを使用しませんか?)

更新2 単なるエクスプローラーではありません。explorer.exeを終了した後、VSの問題はまだ残っています。

Update 3 Asherが示唆するプロセスモニターを使用すると興味深い事実が明らかになります。エクスプローラーモードの場合、ディレクトリを開くとIRP_MJ_CREATEが10回呼び出されます。ただし、IRP_MJ_CLEANUPの呼び出しは9つだけです。この呼び出しはすべてshell32.dll内から行われるため、サードパーティのインストールの問題ではありませ。そして、問題を引き起こすのは明らかにIRP_MJ_CLEANUPが欠落しているものです。ディレクトリを開いてからちょうど1分後に、システムプロセス自体がIRP_MJ_CLEANUP呼び出しを発行し、ファイルが解放され、削除されます。

しかし、私はまだこれがなぜ起こるのか理解できませんでした。私が行った変更によって引き起こされたエクスプローラーのバグですか?

解決!無効にしたサービスを調べてみると、アプリケーションエクスペリエンスの説明に、起動時にアプリケーションのプロセスアプリケーション互換性キャッシュリクエストが記載されていることがわかりました。おなじみですね。実際、サービスを開始した後は、もう問題を再現できず、ProcMonの出力は異なり、短くなります。面白いのは、サービスを再び停止した後、すべてがまだ正常であり、procmonの出力がまだ短いためです。

私は2台のマシンでこれを試しましたが、すべてのサードパーティ製のものは問題なく実行されていて、すべてはまだ問題ありません。

これが本当のバグかどうかはわかりませんが(「サービスを無効にすることで何を期待しますか」と言うこともできます)、サービスを開始してから再び停止するだけで問題が解決するのはまったく正常ではありません。


報奨金は、これについてより深い洞察を提供できる人、または最終的に正しい方向に導いたProcMonを指し示してくれた@Asherに行きます。


2
いくつかの質問。エクスプローラーの問題はセーフモードで発生しますか?シェル拡張機能がインストールされていますか?Visual Studioの問題で、プロセスモニターを実行し、exeにフィルターダウンすると、ファイルにアクセスするものが表示されますか?
sgmoore

奇妙なことに、あなたが提案する両方のシナリオは私にとって期待通りに動作します(エラーなし)。sgmooreが示唆するように、プロセスモニターを無効にし、フォルダー/ファイルを監視します。
Ƭᴇcʜιᴇ007

@sgmoore更新を参照してください
stijn

呼び出しがshell32.dllから発信されたという理由だけで、サードパーティのインストールが除外されることを100%確信していますか?極端に低いレベルで何が起こっているのか、それが真実かどうかを確かめるには十分に知りませんが、それは確かに私がしたであろう仮定ではありません。
sgmoore

@sgmoore 100%いいえ、99%はい。私の結論は、私がここに書いたことに基づいているだけではありません。すべてのシステムdllのシンボルがあるため、procmonのコールスタックに完全な関数名が表示されます。ディレクトリを開くときにエクスプローラーによって行われるすべての呼び出しは、CLoadIconTaskなどの名前を持つクラスから行われます。CLoadIconTaskは、「Microsoft」と書かれた名前です。私はプログラマーなので、コールスタックの解釈に関する知識があります。AutoRunsでは、マイクロソフト以外のものはすべて無効になっています。別のマシンではそうではありませんが、procmonの出力全体は同じです。これらすべての+直観により、私はそれがMSのみであると強く信じています。
stijn

回答:


7

表示されている問題は、Windowsエクスプローラーが作成するthumbs.dbに関連していると思います。これを無効にして再起動し、問題が再現するかどうかを確認してください。

thumbs.dbを無効にするには、グループポリシーエディター(gpedit.msc)を開き、[ユーザーの構成]-[コントロールパネル]> [管理用テンプレート]-[フォルダーオプション]> [Windowsコンポーネント]-[Viev]タブ> Windowsエクスプローラーに移動します。「非表示のthumbs.dbファイルのサムネイルのキャッシュをオフにする」を見つけて、「サムネイルをキャッシュしない」を有効にします。

うまくいかない場合は、Sysinternals Process Monitorを使用して調査してみます。アクセスが拒否されたときにフォルダにアクセスしているユーザーを監視するために使用します。実際にアクセスが拒否されているか、誰かがファイルを保持していることを意味する共有違反かどうかを確認します。


1
Thumbs.dbはwin7には存在しません。
キノキジュフ

1
はい、そうです。フォルダーオプションに移動し、「隠しファイル、フォルダー、およびドライブを表示する」を有効にします
アッシャー

1
Windows 7は、ローカルサムネイルキャッシュ(%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_*.db)を使用します。ただし、リソースがリモート(ネットワーク共有など)でない限りthumbs.db、リモートロケーションに保存されているものを使用します(これはGPによって無効にできます)。
Ƭᴇcʜιᴇ007

2
賛成票:「サムネイルをキャッシュしない」オプションはありませんが、ProcMonを使用すると、ProcessExplorerやハンドルとは異なり、問題の証拠が得られるため、最終的にどこかに移動しました。ファイルを解放するように見えるシステムプロセスからの操作:そのイベントの直後にディレクトリを再び削除できます。ProcMonが提供するものから理にかなっている場合、これをさらに調査します。
stijn

3
@kinokijuf私はあなたがAhserの答えをいじっていたことに気付いたところです。なぜそうするのかわかりませんが、意味がありません。まず、thumbs.dbがないと太字で言います。次に、Asherの答えを編集して、thums.dbを無効にして使用できないようにする方法を説明する部分(「Dom Cache Thumnbnails」はXP用です)。そんなことをしないでください。
stijn

3

セキュリティ製品がインストールされていないことを確認してください。

ここで説明するシナリオは、何らかの製品が、あらゆる方法でアクセスされるすべての実行可能ファイルにアクセスし、排他的アクセスを不可能にするという理論と互換性があります。これはウイルス対策である必要はありません。たとえば、高速検索などのインデクサーなどです(ウイルスであっても)。

Windows以外の製品がまったく起動しないセーフモードで起動することで、この理論をテストできます。

ファイルアクセスのトレースに最適なツールは、プロセスモニターです。すべてのスタートアップ製品を見つけて、それらをオフにしてから再びオンにするためのもう1つの優れたツールはAutorunsです。


インデックスは有効で、Windowsの検索も無効です。サードパーティのセキュリティまたは検索ツールは一切ありません。基本的にあなたの提案は自動実行でサードパーティのツールを無効にしてから、1つずつ有効にしますか?
stijn

セーフモードブートでこれが発生しない場合は、インストールされている製品が原因であることが確実です。Autorunsを使用すると、スタートアップ項目をバッチで無効にして、見つかるまで再起動できます。自動実行の利点は、アイテムを簡単に再有効化できることと、現在の状況を保存/復元/比較できることです。ただし、念のため、最初にシステム復元ポイントを作成することをお勧めします。
harrymc

ログオン、エクスプローラー、インターネットエクスプローラー、およびサービスで、Microsoft以外のすべてを無効にしました。問題はまだ存在します。通常モードで読み込まれたものとセーフモードで読み込まれたものを比較する方法はありますか?
stijn

基本的に、自動実行で表示されるものはすべて通常モードでのみロードされます。
harrymc

まあ、サービス、ネットワークなどを除いて
harrymc

2

ファイルまたはディレクトリはカーネルモードから開くことができます。

handle -a

ProcMonは表示されず、システムプロセスとの間のIRP要求を表示します。

すべてのプロセスにマップされるWindowsカーネルの一部と、別のプロセスで実行されるWindowsカーネルの別の部分があります。後者はWindows Executiveと呼ばれます。

これは、Windows Executiveプロセスでカーネルモードから開かれたファイルまたはディレクトリが原因です。


1

exeからアイコンとメタデータを読み取るExplorerである可能性があります。


これはExplorerの説明ですが、Explorerが同時にこのフォルダを表示していない限り、Visual Studioの説明ではありません。@stijn:これは、ExplorerなしのVisual Studioで発生しますか?
ハリーマック

@harrymc更新を参照して、エクスプローラなしで起こるん(だけでなく、explorer.exeのがまだ実行されているが、exeファイルのディレクトリではありません)
stijn

そして、この問題をどのように修正しますか?
サイモンシーハン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.