2

フィクスチャのセットアップで、ファイルをバックアップしてオリジナルを削除し、オリジナルを存在させずにテストを実行し、ティアダウンでバックアップからオリジナルを復元するテストを作成しようとしています。ファイルは %ProgramFiles% フォルダーにあります。fileInfo.Delete() ステートメントで UnauthorizedAccessException が発生します。Resharper テスト ランナーから実行されていない同じマシン上の別のテスト プロジェクトからこのファイルを削除しても問題ありません。

ファイルを別の場所に移動することはできません。これは、Visual SourceSafe 用にインストールされた dll である ssapi.dll です。(はい、単体テストで侵略的なことをしています。)

どちらの方法でも同じユーザー(私)です-タスクマネージャーで確認しました。私のユーザー アカウントは、ローカルの Administrators グループのメンバーです。ファイルで何かを行うための「承認」を決定する他の要因は何ですか?

解決済み:元の質問 (まだ回答を知りたい) に対する回答ではありませんが、System.Security.Permissions フレームワークを使用して、FileIOPermissionAccess のデマンドを実行することで、テスト目的の回避策を見つけました。 (相互運用呼び出し用に) ファイルを必要とするアプリ (非テスト) コードを読み取り、そのファイルが存在しないというシナリオを必要とするそのコードのテストで同じことを拒否します。これは今のところうまくいくはずです (そして、System.Security.Permissions 名前空間について少し学んだことを嬉しく思います)!

4

5 に答える 5

1

本当に解決策ではありませんが、この問題を別の角度から修正することを検討します。

おそらく、ディレクトリを %AppData% に変更することを検討できます (メイン アプリケーションでもこの変更を行う必要がある場合があります)。

UAC により、ユーザー (またはアプリケーション ユーザー) が %ProgramFiles% ディレクトリを使用できなくなる可能性があるため、問題が解決する可能性があります。

于 2008-09-19T13:42:51.973 に答える
0

ファイルの監査を有効にして、イベント ログでエラー メッセージを確認できます。1 つはローカル セキュリティ ポリシー/ローカル ポリシー/監査ポリシーで、もう 1 つはファイル自体で、2 つの場所で監査を有効にする必要があることに注意してください。これで問題が解決するわけではありませんが、少なくとも問題の診断には役立ちます。

于 2008-10-15T07:01:04.667 に答える
0

ユーザー アカウントにそのフォルダーへのフル アクセスを許可することで、おそらくこれを修正できます。

Windows エクスプローラーでフォルダーに移動します。フォルダを右クリックし、プロパティを選択します。[セキュリティ] タブを選択し、[編集] ボタンを選択して、自分用のフル コントロールを追加します。はい - 潜在的なセキュリティ上の問題だと思いますが、そのディレクトリ内のファイルを変更する必要があり、自分が何をしているのかを知っているように見えるので、うまくいくはずです。

于 2008-09-19T15:36:14.683 に答える
0

ReSharper が別のプロセスとしてテスト ランナーを実行している可能性があり、その別のプロセスは Windows ID を使用しておらず、代わりに権限の低い別の ID を使用しています。

これを確認するには、タスク マネージャーを開き、[すべてのユーザーからのプロセスを表示] をオンにします。

于 2008-09-19T06:47:35.540 に答える
0

UAC をオンにして Vista または Server 2008 を実行していますか? はいの場合、これが原因である可能性があります。テスト ランナー プロセスが「昇格」モードになっていない可能性があります。

于 2008-10-16T19:33:18.190 に答える