Как установить временный путь т.е. значение, возвращаемое Path.GetTempPath ()?

2

Я пытался запустить сайт ASP.net 2.0 под олицетворением, и, похоже, что-то пошло не так. Я отключил изменения в апплете конфигурации ASP.Net IIS.

Однако теперь я застрял в этой ошибке

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, но это тоже не повлияло на это. Он по-прежнему указывает на папку C:\Tmp, которая отображается как диск из-за некоторой политики администратора, очевидно, из-за характера, характерного для Мордака, вокруг этих частей.

Обновление: Кажется, что изменение теперь с запоздалым вступлением в силу. Path.GetTempPath теперь показывает значение i, установленное для этих 2 переменных среды.

Теги:
path
asp.net-2.0

2 ответа

2

Вы можете изменить путь temp для XMLSerializer явно, не изменяя переменные среды для машины. Для этого поставьте

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

в файле app.config.

У Скотта Гензельмана есть статья под названием "" Изменение, где XmlSerializer выводит временные сборки".

0

Используйте \\live.sysinternals.com\tools\ProcMon.exe, чтобы определить, где происходит запись, но я думаю, вы уже знаете, где.

Затем вы можете назначить личность, на которую отказываются разрешения, требуемые команды.

В этом случае Machine\ASPNET необходимо создавать и писать везде, где находится ваш temp dir.

Если вы играете с переменными окружения, для процесса ASP.NET потребуется перезагрузка, чтобы получить модификацию, но у вас все еще будет проблема, так как по умолчанию в каталог применяется набор защит который предотвращает многократное нарушение формы записи в одну и ту же область.

  • 0
    Я попытался запустить с 2 учетными записями администратора, и он по-прежнему выдает ту же ошибку и упоминает имя администратора в сообщении об ошибке. Так что я не уверен, что здесь происходит ...
  • 0
    Изменили ли вы безопасность файлов в временном каталоге, чтобы пользователь ASPNET мог записывать туда файлы? Если вы не уверены, что основаны на материалах procmon или не используете пул приложений от имени этого администратора (то есть не полагаетесь на импровизацию), есть шанс, что проблема в этом. К сожалению, сейчас мне нужно уйти в автономный режим на долгое время, поэтому я надеюсь, что вы об этом узнаете, или кто-то еще!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню