2009-05-27 14 views
13

大きな醜いWebサイトプロジェクトを実行するたびに、毎回、UnauthorizedAccessExceptionが発生しました。 Temporary ASP.NET Files\ctheweb\0d76d363\4695c81f\App_Web_vi6bbbpy.dll' is denied.その後、プロジェクトを停止して再起動すると正常に動作します。私はいくつかのテストを行い、デバッグし、修正し、再度実行し、エラーを再度取得します。一時的なASP.NETファイルへの頻繁なアクセスが拒否されました

私はそのディレクトリをクリアするためにビルド前のコマンドを追加する傾向がありますが、私はいつも少なくとも最初はハンマー以外のもので問題を解決したいと考えています。

+0

は参考のため、ここではスタックトレースです。しかし、それは私が64ビットマシン上で32ビットに私のアプリケーションプールを切り替えた後に始まりました。これもあなたの場合ですか? –

答えて

10

これは、ASP.NETがコンパイルしようとしていて、VSがコンパイルしようとしていて、ASP.NETがファイルを実行しようとしているときに、aspxページを常に変更しているときに発生します。また、IISをリセットするとロックが解除されることがあります。

iisreset /stop 
del "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files\*.*" /Q /F /S 
del “C:\windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\*.*” /Q /F /S 
iisreset /start 

これが実際に発生した場合は、これをweb.configに追加してください。

<compilation tempDirectory = “C:\windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\Other\” /> 

は(側にスクロールし、キーは、デフォルトよりも、いくつかの\その他\フォルダを選択することではありません。

そして最後に、事前にすべてをプリコンパイルしようとする展開プロジェクトを使用します。いいえ、コンパイルtempフォルダで物事を交換する試みを意味しない

それとも、OSの診断を試してみて、プロセスがそのファイルをロックしているかを調べると、そのプロセスを強制終了してみてください。価値がない努力を簡単に解決策が存在する場合にすることができます。

+1

誰かがこの投稿が投票された理由を説明できますか?貢献せずに単純に投票を下すだけでは、建設的ではなく、単に失礼です。 – ProfK

+0

私はランダムに投票を防衛しようとしていませんが、あなたの質問はあなたがハンマーを使用したくないと言った、そして、これは私があなたに与えたスレッジハンマーです。これは開発用ボックスであり、スクリプトは高速に実行されるため(最悪のハンマーとは異なり、再起動)、それは私にとっては適切だったようです。 – MatthewMartin

+1

これは良い解決策です。ただし、2つのdelコマンドの前にiisresetを置くと、w3p.exeがそれらのファイルを保持しているため、削除を実行できるようになります。 – Marc

0

「Windowsデスクトップサーチ」のようなプロセスがないことを確認して、そのフォルダのインデックスを作成してください。

0

あなたはそのファイルに対してオープンハンドルを持っているようですが、 Filemonまたは類似のツールを使用してそれを追跡して、開いているハンドルを保持しているプロセスを確認することができます。

1

私は、ワークステーションのアンチウィルスプログラムが「間違った」時間にファイルにアクセスしたために、過去のものではありません。ファイルが開いているかどうかを判断するために使用できるもう1つのツール:Process Explorer(ここでは役に立たなくても、あなたの個人的な目的のためにお勧めします。

4

それはは、ウイルススキャナや検索インデクサーのようないくつかの外部プロセスによって引き起こさロックされている場合は、ファイルを読むために、他のユーザーやプロセスの権利をロックダウンするために、Windowsのアクセス権を使用してみてください。既定では、Temporary ASP.NET Filesディレクトリは、ユーザー、管理者、IIS_USR、SYSTEM、およびTrustedInstaller(すべてのユーザーについて)で使用できます。

異なる編集フォルダのMatthewMartinのアドバイスを試してみてください。その後、

<compilation tempDirectory = “C:\LimitedPermissionCompilationDir\” /> 

そして、許可を必要とするだけのユーザーおよびグループにLimitedPermissionCompilationDirフォルダを制限する - あなたは、ファイルベースのWebサーバ用にコンパイルされている場合は、IIS、または自分のアカウントで実行している場合、たとえばIIS_USRを。

これは、実行しているサイト以外に影響を与えることを心配する必要がないため、これは比較的安全な方法です。

+0

IISのリセットによって特定の古いMicrosoft DLLへのアクセスが拒否される問題が発生しました。その後、そのアプリケーションの新しいIIS tempフォルダが修正されます。他のプロセスがこの特定のファイルをスキャンしてロックしていると確信して、私はあなたのソリューションを試して、アプリケーション用のカスタムの一時ディレクトリを強制しました。問題(ファイルのロック)に対する解決策ではありませんが、まったく受け入れられない回避策は、まったくやっかいではありません。ありがとうございました! – Tor

+0

@tor問題ありません! –

1

私はweb.config内の別のユーザーに偽装を使用していて、そのユーザーには権利がないときにこれを見つけました。ドゥー!

9

私の場合、答えは簡単ではありませんでした。まずは間違いありませんでした。私の場合、ASP.NETは実際にWebアプリケーションを起動するたびにこれを内部的にスローし、別のデバッグセッションから偶然に「すべての例外を破る」設定を忘れてしまっただけです。私はそれをチェックし、すべてうまくいった。私も今週、このエラーを取得してきた

> mscorlib.dll!System.IO.__Error.WinIOError(int errorCode, string maybeFullPath) Unknown 
    mscorlib.dll!System.IO.FileStream.Init(string path, System.IO.FileMode mode, System.IO.FileAccess access, int rights, bool useRights, System.IO.FileShare share, int bufferSize, System.IO.FileOptions options, Microsoft.Win32.Win32Native.SECURITY_ATTRIBUTES secAttrs, string msgPath, bool bFromProxy, bool useLongPath, bool checkHost) Unknown 
    mscorlib.dll!System.IO.FileStream.FileStream(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, int bufferSize, System.IO.FileOptions options, string msgPath, bool bFromProxy) Unknown 
    mscorlib.dll!System.IO.FileStream.FileStream(string path, System.IO.FileMode mode) Unknown 
    System.Web.dll!System.Web.UI.Util.HasWriteAccessToDirectory(string dir) Unknown 
    System.Web.dll!System.Web.HttpRuntime.SetUpCodegenDirectory(System.Web.Configuration.CompilationSection compilationSection) Unknown 
    System.Web.dll!System.Web.HttpRuntime.HostingInit(System.Web.Hosting.HostingEnvironmentFlags hostingFlags, System.Security.Policy.PolicyLevel policyLevel, System.Exception appDomainCreationException) Unknown 
    System.Web.dll!System.Web.HttpRuntime.InitializeHostingFeatures(System.Web.Hosting.HostingEnvironmentFlags hostingFlags, System.Security.Policy.PolicyLevel policyLevel, System.Exception appDomainCreationException) Unknown 
    System.Web.dll!System.Web.Hosting.HostingEnvironment.Initialize(System.Web.Hosting.ApplicationManager appManager, System.Web.Hosting.IApplicationHost appHost, System.Web.Configuration.IConfigMapPathFactory configMapPathFactory, System.Web.Hosting.HostingEnvironmentParameters hostingParameters, System.Security.Policy.PolicyLevel policyLevel, System.Exception appDomainCreationException) Unknown 
    System.Web.dll!System.Web.Hosting.HostingEnvironment.Initialize(System.Web.Hosting.ApplicationManager appManager, System.Web.Hosting.IApplicationHost appHost, System.Web.Configuration.IConfigMapPathFactory configMapPathFactory, System.Web.Hosting.HostingEnvironmentParameters hostingParameters, System.Security.Policy.PolicyLevel policyLevel) Unknown 
    [AppDomain (DefaultDomain, #1) -> AppDomain (/LM/W3SVC/4/ROOT-1-130624548490751465, #2)] 
    System.Web.dll!System.Web.Hosting.ApplicationManager.CreateAppDomainWithHostingEnvironment(string appId, System.Web.Hosting.IApplicationHost appHost, System.Web.Hosting.HostingEnvironmentParameters hostingParameters) Unknown 
    System.Web.dll!System.Web.Hosting.ApplicationManager.CreateAppDomainWithHostingEnvironmentAndReportErrors(string appId, System.Web.Hosting.IApplicationHost appHost, System.Web.Hosting.HostingEnvironmentParameters hostingParameters) Unknown 
    System.Web.dll!System.Web.Hosting.ApplicationManager.GetAppDomainWithHostingEnvironment(string appId, System.Web.Hosting.IApplicationHost appHost, System.Web.Hosting.HostingEnvironmentParameters hostingParameters) Unknown 
    System.Web.dll!System.Web.Hosting.ApplicationManager.CreateObjectInternal(string appId, System.Type type, System.Web.Hosting.IApplicationHost appHost, bool failIfExists, System.Web.Hosting.HostingEnvironmentParameters hostingParameters) Unknown 
    System.Web.dll!System.Web.Hosting.ProcessHost.StartApplication(string appId, string appPath, out object runtimeInterface) Unknown 
関連する問題