2012-02-22 28 views
0

IISで実行されているASP.NET Webサイトと組み合わせて、AppDomainsのシャドウコピー機能に問題があります。問題は、アクセス許可が不十分なために、シャドウコピーされたファイルをIISユーザーが読み取ったり、実行したりできないことです。AppDomainシャドウコピーされたファイルアクセスがIIS6で実行されているASP.NETサイトで拒否されました

新しいアプリケーションドメイン内のコードは、(DoCallBack経由でコールバックメソッドを介して)実行されたとき、私は、次のエラーメッセージが表示されます。
System.IO.FileLoadException:ファイルまたはアセンブリをロードできませんでした「My.Namespace.AssemblyName、バージョン= 0.0.3.2231、Culture =ニュートラル、PublicKeyToken = null 'またはその依存関係の1つ。アクセスは拒否されました。

フュージョンログ:

Assembly manager loaded from: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll 
Running under executable c:\windows\system32\inetsrv\w3wp.exe 
--- A detailed error log follows. 

=== Pre-bind state information === 
LOG: User = NT AUTHORITY\NETWORK SERVICE 
LOG: DisplayName = My.Namespace.AssemblyName, Version=0.0.3.2231, Culture=neutral, PublicKeyToken=null 
(Fully-specified) 
LOG: Appbase = file:///C:/Inetpub/wwwroot/Web Suite/Widgets 
LOG: Initial PrivatePath = NULL 
Calling assembly : (Unknown). 
=== 
LOG: This bind starts in default load context. 
LOG: No application configuration file found. 
LOG: Using host configuration file: \\?\C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet.config 
LOG: Using machine configuration file from C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\machine.config. 
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind). 
LOG: Attempting download of new URL file:///C:/Inetpub/wwwroot/Web Suite/Widgets/My.Namespace.AssemblyName.DLL. 
ERR: Failed to complete setup of assembly (hr = 0x80070005). Probing terminated. 

私はすでに行っている:私は許可されている
「のCを:/のinetpub/wwwrootに/ウェブスイート/ウィジェット」フォルダは、ユーザーのネットワークサービスの読み取り許可と実行'
シャドウコピー機能をオフにすると、すべて正常に機能します。
Visual Studio 2008のローカルコンピュータでも、問題なく実行されます。
Widgetsフォルダのすべてのファイル(フォルダ自体ではなく)に読み取り権限と実行権限を与えても問題は解決しません。

私はそれはASP.NETの一時ファイルのフォルダのアクセス許可をしなければならないと思った:
C:\ WINDOWS \ Microsoft.NET \ Frameworkの\ v2.0.50727の\ ASP.NETの一時ファイルの\ウェブスイート
このフォルダ内のすべてのサブフォルダとその中のファイルには、ユーザ 'NETWORK SERVICE'の実行許可を読み込み、読み取るために&が読み込まれています。だからそれは問題でもありません。

短くする:
私のサイト(IIS6で実行中)が新しいAppDomainのシャドウコピーされたファイルにアクセスできないのはなぜですか? MachineNameに\アカウント名は、アプリケーションプールのIDです

aspnet_regiis -ga MachineName\AccountName

+0

こんにちは。私は同じ問題があります。あなたは最終的に解決策を見つけましたか? –

+0

いいえ、私は最終的に別のAppDomainを使用しないで、代わりに既定のASP.NET AppDomain(シャドウコピー機能を有効にしている)を使用することにしました。このソリューションの唯一の欠点は、プラグインがbinディレクトリになければならないことです。カスタムディレクターではありません。 –

答えて

0

問題の原因はCachePathのデフォルト値です。 AppPoolがネットワークサービスで実行されている場合、DefaultUserの一時フォルダの場所が使用されます(理由はわかりません)。しかし、ネットワークサービスはフォルダへのアクセス権を持っておらず、例外の理由です。解決方法は、CachePathを明示的に設定することです。たとえば、ASP.NET AppPoolキャッシュパスを使用できます。

var domainInfo = new AppDomainSetup 
    { 
    CachePath = AppDomain.CurrentDomain.SetupInformation.CachePath 
    /* ...*/ 
    }; 
+0

それは感謝します、ありがとう!私はこれをテストする状況ではありませんが、私はあなたの答えを受け入れたものとしてマークします。 –

0

は、このような-gaオプションでaspnet_regiisを実行してみてください。

+0

Thanks Jared。 サイトが使用するアプリケーションプールのIDは「ネットワークサービス」です。だから私は 'aspnet_regiis -ga"ネットワークサービス "を試してみたが、あなたは運がない。サイトを再起動しても、System.IO.FileLoadException(アクセスは拒否されます)が表示されます。 –

関連する問題