私の会社では、通常は手作業で行う単純なタスクを処理するスクリプトを作成しています。一部を除いて、c:\documents and settings\ のプロファイルを削除するために c# を使用しています。これらはそのままにしておくだけです。問題は、ファイルを通常に設定し、管理者ユーザーを所有者としてマークするコードを使用しても、ファイルが削除されないことです。彼らは、クイック起動フォルダーへのアクセスが拒否されていると言います。再帰的な権限変更方法を使用していますが、それが機能することはわかっています。ファイル属性についても同じです。うまくいかないのはなぜですか?これを修正するにはどうすればよいですか?
4 に答える
問題は、他のプロセスがそれらのファイルまたはディレクトリへのオープンハンドルを持っていることである可能性があります。どのプロセスが原因であるかを見つけるのを助けるために、 ProcessExplorerの検索機能を使用してそれらを見つけることができます。
(明確にするために:これは、ファイルを削除するコードを作成する方法に関する提案ではなく、現在のシステムが機能しない原因を正確に特定する方法に関する提案です。)
権限の問題ではなく、ファイルのロックの問題である可能性があります。どちらも権限の問題のようです。
これがアクセス制御ではなくファイルロックが原因であるかどうかを確認するには、http://technet.microsoft.com/en-us/sysinternals/bb896653.aspxからProcessExplorerツールをダウンロードします。
管理者として実行し、[検索]-> [ハンドル]または[DLL]を使用して、ロックされているかどうかを確認します。
それ以外の場合は、問題なく所有権を取得して削除へのアクセスを許可できるはずです。
これは非常にトリッキーです。PInvoke を使用してネイティブ API を呼び出す必要があります (どの API かはわかりません)。Unlockerは、他のプロセスで使用されているファイルのロックを解除するユーティリティです。Windows 7 および一部のエディションの Windows の 64 ビット バージョンではまだ動作していません。