Код работает нормально в локальной Windows 2008, но не может создать подпапку в Application Data в облаке Azure - PullRequest
1 голос
/ 14 июля 2011

Моя программа должна хранить вещи в "% AllUsersProfile% \ Application Data \ Stuff" (зависит от кода, который я не могу изменить).Я использую следующий код для рекурсивного создания папки:

class DirCreator {
   internal static void Create( String path )
   {
       create( new DirectoryInfo( path ) );
   }
   void create( DirectoryInfo info )
   {
       String path = info.FullName;
       if( Directory.Exists( path ) ) {
           return;
       }
       if( info.Parent != null ) {
           create( info.Parent );
       }
       Directory.CreateDirectory( path );
   }

}

, и код вызывающей стороны выполняет следующие действия:

String appData = Environment.GetFolderPath(
    Environment.SpecialFolder.CommonApplicationData );
Creator.Create( Path.Combine( appData, "Application Data\\Stuff" ) );

Мне пришлось использовать этот кодчасто я обнаружил, что простой Directory.CreateDirectory() не будет работать.

Теперь на моем локальном 64-битном Windows 2008 R2 Standard код, приведенный выше, работает нормально.Когда я делаю то же самое в моей роли Azure OnStart(), происходит следующее:

  • Environment.GetFolderPath () возвращает D: \ ProgramData
  • после спуска рекурсии и вызывает Directory.Exists( "D:\\ProgramData\\ApplicationData" ), чтовызов возвращает true, и рекурсия заканчивается
  • , когда позже Directory.CreateDirectory( "D:\\ProgramData\\Application Data\\Stuff" ) этот вызов завершается с

Не удалось найти часть пути 'D: \ ProgramData \ ApplicationДанные \ Stuff '.

, которые я просто не получаю.Может быть, это что-то с виртуализацией?

Что происходит и как мне это решить?

Ответы [ 2 ]

1 голос
/ 14 июля 2011

Я несколько удивлен, что это работает на стандартном сервере ... веб-сайты под IIS работают как пользователь с довольно ограниченными привилегиями, и я не ожидаю, что у этого пользователя будут права на создание каталогов под% AllUsersProfile%.Вы уверены, что при локальном тестировании сайт не работает под учетной записью с более высоким уровнем привилегий?

1 голос
/ 14 июля 2011

Всего две маленькие подсказки:

  1. Directory.CreateDirectory уже работает рекурсивно.Нет необходимости в вашем Creator классе.Я предлагаю удалить его.
  2. Ваш объединенный путь будет% AllUsersProfile% \ Application Data \ Application Data \ Stuff.Обратите внимание на двойные данные приложения?Environment.SpecialFolder.CommonApplicationData возвращает %AllUsersProfile%\Application Data, который вы объединяете с Application Data\Stuff ...
...