2009-07-31 19 views
2

私は偽装の下でASP.net 2.0サイトを実行しようとしていましたが、何かが間違っているようです。私はASP.Net IIS設定アプレットで私の変更をundid。Tempパスの設定方法。 Path.GetTempPath()によって返される値?

しかし今、私はこのエラーを

System.UnauthorizedAccessException: Access to the temp directory is denied. Identity 'MACHINE\ASPNET' under which XmlSerializer is running does not have sufficient permission to access the temp directory. CodeDom will use the user account the process is using to do the compilation, so if the user doesnt have access to system temp directory, you will not be able to compile. Use Path.GetTempPath() API to find out the temp directory location. 
    at System.Xml.Serialization.Compiler.Compile(Assembly parent, String ns, XmlSerializerCompilerParameters xmlParameters, Evidence evidence) 
    at System.Xml.Serialization.TempAssembly.GenerateAssembly(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, Evidence evidence, XmlSerializerCompilerParameters parameters, Assembly assembly, Hashtable assemblies) 
    at System.Xml.Serialization.TempAssembly..ctor(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, String location, Evidence evidence) 
    at System.Xml.Serialization.XmlSerializer.FromMappings(XmlMapping[] mappings, Evidence evidence) 
    at System.Web.Services.Protocols.XmlReturn.GetInitializers(LogicalMethodInfo[] methodInfos) 

を立ち往生していますので、私は一時パスを変更しようとした - MSDNは、この値を導出する方法のような状態はありませんが。私はTEMPとTMP環境変数を設定しようとしましたが、それはそれにも影響しませんでした。それでも、これらの部分の周りのMordacのような管理ポリシーのため、ドライブとしてマップされているC:\ Tmpフォルダを指しています。

更新:この変更は遅れていたようです。 Path.GetTempPathは、これら2つの環境変数に設定された値iを表示するようになりました。

答えて

0

\\live.sysinternals.com\tools\ProcMon.exeを使用して、書き込みが行われている場所を判断してください。しかし、あなたはすでにどこに知っていると思います。

次に、拒否されているアイデンティティーに必要なポインターを割り当てることができます。

この場合、Machine \ ASPNETは、あなたの一時ディレクトリがどこにでも書き込まれます。&を作成する必要があります。

環境変数を使用すると、ASP.NETプロセスで再起動が必要になりますが、問題が発生する可能性があります。デフォルトでは、一連の保護が適用されます。複数の独立したファイルが同じ領域に書き込まれるのを防ぐディレクトリです。

+0

私は2つの管理ユーザーアカウントで実行しようとしましたが、同じエラーが表示され、エラーメッセージに管理者ユーザー名が記載されています。だから私はここで何が起こっているのか分からない... – Gishu

+0

ASPNETユーザーがそこにファイルを書き込めるようにtemp dirのファイルセキュリティを変更しましたか? procmonの内容に基づいていることや、その管理者としてアプリケーションプールを実行している(つまり、偽装に頼っていない)ことが確実でない限り、問題が発生する可能性があります。残念ながら私は長い間、今オフラインにする必要がありますので、私はあなたがそれを賞賛するか、他の誰かが願っています! –

2

マシンの環境変数を変更することなく、XMLSerializerの一時パスを明示的に変更できます。これを行うには、app.configファイルに

<xmlSerializer tempFilesLocation="c:\\newTemp"/> 

を入力します。

Scott Hanselmanには、「Changing where XmlSerializer Outputs Temporary Assemblies」というタイトルの記事があります。

関連する問題