C# WMI запускает исполняемый файл на удаленном ПК, который затем запускает другой исполняемый файл на том же ПК, который затем вызывает Directory.CreateDirectory по сетевому пути и терпит неудачу.

Используя С# WMI, я запускаю исполняемый файл на другом компьютере, и этот исполняемый файл запускает другой исполняемый файл с использованием класса С# Process. Последний exe пытается вызвать Directory.CreateDirectory, используя сетевой путь (также известный как \\\\comp1\d$\dir\). Directory.CreateDirectory выдает это исключение:

Access to the path '\\\\blah\blah\blah' is denied.   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.Directory.InternalCreateDirectory(String fullPath, String path, DirectorySecurity dirSecurity)
   at System.IO.Directory.CreateDirectory(String path, DirectorySecurity directorySecurity)

Если я запускаю третий exe прямо в консоли на компьютере, он существует, это исключение не выдается, и все работает нормально.

В настройках безопасности для папки, в которой создается каталог, «Все» имеют полные разрешения.

Как решить эту проблему?


person jestro    schedule 18.02.2010    source источник
comment
Убедились ли вы, что настройки безопасности общей сетевой папки разрешают вам чтение/запись?   -  person Aaron    schedule 18.02.2010
comment
Вы видели ответ @Nick ниже? Мои исследования в WMI говорят мне, что у него есть правильный ответ. Если вы согласны, вы можете выбрать его. :)   -  person Lizz    schedule 16.12.2014


Ответы (3)


Также имейте в виду, что при запуске приложения через WMI существует третий уровень прав. Например, если вы вызываете метод для существующего объекта WMI, он может не делегировать права вызывающей стороны или даже права исполняемого файла хоста, но будет иметь пустой участник. Это может происходить с вами.

Перейдите в «Управление компьютером» и в разделе «Службы и приложения» щелкните правой кнопкой мыши узел управления WMI и выберите «Свойства». Перейдите на вкладку «Безопасность», а затем перейдите к правильному пространству имен WMI (скорее всего, root\CIMV2) и убедитесь, что используемый вами пользователь также имеет соответствующие права.

person Nick    schedule 18.02.2010
comment
Если бы я добавил всех в root\CIMV2 и дал им полные разрешения, помогло бы это? - person jestro; 19.02.2010
comment
Возможно. Я не совсем уверен, что здесь происходит. Я просто хотел, чтобы вы знали, что когда вы выполняете действие, запущенное через WMI, у вас фактически есть третий набор разрешений, с которым нужно иметь дело. - person Nick; 19.02.2010
comment
Точно, спасибо за наводку. Болезненная ситуация конечно. - person jestro; 19.02.2010
comment
Ник прав: WMI по своей сути не отправляет учетные данные процессу, запущенному на удаленном хосте. Для этого потребуется правильный вход в систему в качестве других пользователей, что слишком опасно. Однако есть еще один метод, созданный Фрэнком Уайтом. Я ссылаюсь на него и создал полный скрипт здесь: stackoverflow.com/a/11948096/1569434. - person Lizz; 04.09.2012

Как сказал Аарон, безопасность общего ресурса Windows состоит из двух компонентов. Первый — это безопасность самого общего ресурса. Во-вторых, безопасность файлов и папок в этом общем ресурсе.

Оба должны разрешить доступ к каталогу создания, чтобы это работало.

Вы также должны знать, что группа ВСЕ включает учетные записи компьютеров домена, встроенную системную учетную запись, пользователей домена, гостей и пользователей, прошедших проверку подлинности.

Это означает, что первое, что вы хотите сделать, это посмотреть, под каким пользователем это на самом деле работает. Если он работает под учетной записью компьютера И не является частью домена, вам необходимо предоставить этой учетной записи компьютера доступ к общему ресурсу и файловой системе.

person NotMe    schedule 18.02.2010

См. эту тему для некоторых предложений о разрешениях.

http://www.eggheadcafe.com/community/aspnet/2/10058550/how-to-create-a-folder-in.aspx

person Aaron    schedule 18.02.2010