У меня странная ошибка, из-за которой мой код возвращает исключение файла, не найденного, но, похоже, файл именно там, где и должен быть. В моем проекте есть некоторый код для запуска системного командлета и поиска результатов командлета в выходном файле XML. Мы говорим командлету поместить этот выходной XML в пользовательский подкаталог системного каталога TEMP, например, C: \ WINDOWS \ TEMP \ SomeFolder \ output.xml. Затем мы используем класс .NET XmlDocument для открытия и анализа файла XML.
На WinXP это работает. На моем Dev Box это работает. На чистой тестовой машине Win7 это не так.
Моей первой мыслью было, что я запускаю виртуализацию файлов в Vista / Win7, но манифест нашего приложения указывает, что наше приложение запускается от имени администратора - и из того, что я прочитал, это должно обойти виртуализацию файлов.
Другая проблема заключается в том, что нашему коду нравится использовать пути к файлам UNC, даже если файл является локальным для машины. (У нас есть требование, чтобы в рассматриваемом коде мог выполняться командлет на удаленной машине, и, следовательно, выходной XML мог бы быть и на удаленной машине.) Поэтому мы пытаемся открыть файл XML через \ MATT-WIN7 \ C $ \ WINDOWS \ TEMP \ SomeFolder.xml вместо C: \ WINDOWS \ TEMP \ SomeFolder \ output.xml.
Но я временно удалил код пути UNC, и простой вызов File.Exists () по-прежнему говорит, что XML-файл не существует, когда проводник Windows показывает файл, находящийся именно там, где я думаю, должен быть.
Есть ли какой-то нюанс виртуализации файлов, о котором я еще не читал?
Мой обходной путь - переместить выходной xml-файл куда-нибудь еще, но это может нарушить «переносимость» нашего кода, когда он должен выполняться на удаленной машине, потому что использование расположения% TEMP% - это расположение, которое может быть разрешается для удаленных компьютеров довольно легко (через удаленный вызов реестра, чтобы найти системную переменную среды).
Я бы предпочел оставить файл там, где он есть, и исправить наш код, чтобы он действительно находил файл!