2011-07-25 13 views
3

私の2.0 .netアプリケーションが、アセンブリに割り当てられたアクセス権を制限したときに実行される理由を知りたい。.NETアプリケーションを実行できるCASPolはなぜですか?

エンタープライズレベルで、特定のデジタル署名を持つアセンブリと一致する新しいコードグループを作成しました。コードグループは、関連付けられているアクセス許可セットのアクセス許可のみが使用されるように設定されており、さらに低いポリシーレベルは評価されません。

  • UnmanagedCode、
  • 環境
  • FILEIO
  • レジストリ
  • 反射

I:

.NET 2.0 PermCalcを実行すると、私のアプリケーションは、次の権限が必要であると述べています私のカスタムコードグループに割り当てられましたアンマネージコードの許可ですが、それ以外のものはありません。

私のアプリケーションの最初の方法では上記のすべてのアクセス権が必要ですので、終了する前にユーザーに分かりやすいメッセージを表示することができます。

.NET 2.0コンフィグレーション「アセンブリの評価」ツールをアセンブリで実行すると、アプリケーションにはUnmanagedCodeパーミッションのみが与えられます。

しかし、私のアプリケーションを実行して実行すると、明らかにさまざまなFileIOとRegistryの操作が行われます。

私のアプリは、制限されたコードグループと一致するデジタル署名で署名されています。

誰でもこの動作の理由を説明することはできますか。

注:私の究極の目的は、ネットワーク共有から実行した場合、自分のアプリケーションがひどくクラッシュしないようにすることです。アセンブリの証拠ゾーンがMy_Computerであることを確認したいと思いますが、もはや.NET 3.5 SP1ではこれを行うことができません。 FullTrust On the LocalIntranet

ご協力いただきありがとうございます。

答えて

2

CASポリシーを正しく構成した場合、構成したポリシーのCLRで実行されていないため、アプリケーションが期待するアクセス許可を拒否されていない可能性があります。おそらく32ビットと64ビットのCLRが同じマシンにインストールされていますか?

あなたの「早期チェック」の需要が間違っている可能性があります。それはあなたのアプリケーションのメインメソッドで直接ですか?そうであれば、デマンドが実行されると、検証されたコールスタック上にアプリケーションコードはありません。これが問題であれば、要求をMainから呼び出された別のメソッドに移動するだけで、要求が失敗するはずです。

+0

こんにちはニコール、ご返信ありがとうございます。私は誤解を招く私の質問で間違いを犯したことを理解しています。私のアプリケーションは実際には.Net 2.0アプリケーションです(3.5の前提条件を持つべきではありません)。私は実際に3.5 SP1のフレームワークがインストールされている。ユーザーは.NET 2.0しかインストールされていない可能性がありますが、ネットワーク共有から実行しようとしているため、このチェックを行う必要があります。この場合、アプリはちょうどクラッシュするので、もっと優雅にしたいと思います。上で概説したシナリオは、私のアプリケーションがクラッシュすると予想されるテスト状況でした....しかし、それはありません! –

+0

私は32/64ビットclrについて今すぐチェックします。 –

+0

ああ...今はもっと意味をなさない。私は、上記の条件の下で通過する需要のための別の可能な説明を追加するために私の答えを編集しました。 –

-1

.NET 3.5 SP1 - http://msdn.microsoft.com/en-us/library/system.security.policy.zone.aspxでアセンブリ証拠ゾーンを確認できます。

あなたのアセンブリを可能にするものについては、http://msdn.microsoft.com/en-us/library/tx1dts55.aspxを参照してください。

このhttp://blogs.msdn.com/b/brada/archive/2007/10/26/adhoc-poll-allowing-net-exes-to-run-off-a-network-share.aspxは、あなたが見るものに影響を与える可能性が...

EDIT:

ネットワーク共有から実行するときに確認するためにあなたはまだAssembly.GetExecutingAssembly().Locationを取得し、それUNCまたはnetowrkドライブを経由しているかどうかを確認することができますDriveType(ご住所はSystem.IO.DriveInfo[])(例:System.IO.DriveType.Network)。

+0

ネットワーク共有から実行している.NET 3.5 SP1の管理対象アプリケーションは、INTRANET_ZONEの代わりにMY_COMPUTER_ZONEに表示されます。つまり、アプリがMY_COMPUTER_ZONEで実行されているかどうかを確認することができなくなる可能性があります。これは、潜在的にネットワーク共有にある可能性があるためです。 –

+0

オハイオ州オクラホマ...これは、彼らがそれを "ハックした"方法であることを知らなかった.. – Yahia

+0

ネットワークドライブからの実行に関する私の編集を参照してください – Yahia

関連する問題