C # WMI запускает исполняемый файл на удаленном ПК, который затем запускает другой исполняемый файл на том же ПК, который затем вызывает Directory.CreateDirectory по сетевому пути и завершается ошибкой - PullRequest
6 голосов
/ 18 февраля 2010

Используя C # WMI, я запускаю exe-файл на другом компьютере, и этот exe-файл запускает другой exe-файл, используя класс C # 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-файл прямо в консоли на компьютере, он существует, исключение не выдается, и все работает нормально.

Параметры безопасности для папки, в которой создается каталог, имеют все права доступа "Все".

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

Ответы [ 3 ]

2 голосов
/ 19 февраля 2010

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

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

1 голос
/ 18 февраля 2010

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

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

Вы также должны знать, что в группу EVERYONE входят учетные записи компьютеров домена, встроенная системная учетная запись, пользователи домена, гостевые и аутентифицированные пользователи.

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

0 голосов
/ 18 февраля 2010

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

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

...