2009-07-31 5 views
2

J'essayais d'exécuter un site ASP.net 2.0 sous l'usurpation d'identité et quelque chose semble avoir mal tourné. J'ai défait mes modifications dans l'applet de configuration IIS ASP.Net.Comment régler le chemin Temp c'est à dire. la valeur renvoyée par Path.GetTempPath()?

Mais maintenant je suis coincé avec cette erreur

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) 

J'ai essayé de changer le chemin temporaire - mais MSDN ne dit pas à la façon dont elle dérive cette valeur. J'ai essayé de définir les variables d'environnement TEMP et TMP mais cela ne l'a pas affecté non plus. Il pointe toujours vers le dossier C: \ Tmp qui est mappé en tant que lecteur en raison d'une certaine politique d'administration apparemment d'un personnage semblable à Mordac autour de ces parties.

Mise à jour: Il semble que le changement a maintenant pris effet tardivement. Path.GetTempPath affiche maintenant la valeur que j'ai définie pour ces 2 variables d'environnement.

Répondre

0

Utilisez \\live.sysinternals.com\tools\ProcMon.exe pour déterminer où l'écriture est en cours, mais je pense que vous savez déjà où.

Ensuite, vous pouvez affecter les autorisations requises à l'identité refusée.

Dans ce cas, la machine \ ASPNET doit créer & pour écrire dans votre répertoire temporaire. Si vous allez jouer avec les variables d'environnement, le processus ASP.NET nécessitera un redémarrage pour récupérer la modification, mais vous vous retrouverez toujours avec un problème, car par défaut, un ensemble de protections est appliqué au répertoire qui empêche l'écriture de plusieurs inditités dans la même zone.

+0

J'ai essayé d'exécuter avec 2 comptes d'utilisateur admin et il donne toujours la même erreur et mentionne le nom d'utilisateur admin dans le message d'erreur. Donc, je ne suis pas sûr de ce qui se passe ici ... – Gishu

+0

Avez-vous modifié la sécurité des fichiers sur le répertoire temp pour permettre à l'utilisateur ASPNET d'écrire des fichiers là-bas? À moins que vous ne soyez sûr de ce qui se passe sur procmon ou que le pool d'applications soit exécuté en tant qu'utilisateur admin (c'est-à-dire ne s'appuyant pas sur l'imputation), il y a une chance que ce soit le problème. Malheureusement, je dois me déconnecter maintenant depuis longtemps et j'espère que vous le ferez, ou quelqu'un d'autre! –

2

Vous pouvez modifier explicitement le chemin temporaire du XMLSerializer sans avoir à modifier les variables d'environnement de la machine. Pour ce faire, mettez

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

dans votre fichier app.config.

Scott Hanselman a un article intitulé "Changing where XmlSerializer Outputs Temporary Assemblies" à ce sujet.

Questions connexes