У меня работает служба на Windows Server 2008 R2, которая требует доступа к сопоставленному диску webdav для копирования зависимостей файлов. Все работает, когда я запускаю net use из командной строки:
чистое использование z: https://domain.com/webdav / пользователь: пароль этого пользователя
или запустите мой сценарий из командной строки, сценарий сборки муравья:
<target name="mapdrive.developer" depends="checkmappeddrive" unless="mapped.drive.present">
<antcall target="disconnect.mapped.drive" />
<echo message="Mapping drive..." />
<exec executable="net">
<arg value="use" />
<arg value="z:" />
<arg value="https://test.com/plugins/servlet/confluence/default" />
<arg value="/PERSISTENT:YES" />
<arg value="/USER:xxxxx" />
<arg value="xxxxx" />
</exec>
</target>
Да, это карта webdav SSL / HTTPS. Мне известны системные настройки в реестре, и у меня установлен WebClient "Desktop Experience". Все работает нормально при входе в систему и запуске из командной строки. Однако, если я возьму этот сценарий и создаю его из моей службы сборки, которая работает как учетная запись локальной системы, команда завершится с ошибкой: «Произошла системная ошибка 67». Я попытался включить «Разрешить службе взаимодействовать с рабочим столом» и изменить настройку «Войти как» на обычного пользователя. Ни то, ни другое не сработало. Я искал и обнаружил аналогичные проблемы у людей, успешно отображающих диски в качестве пользователя, но не работающих при запуске из сценариев в качестве службы, локальной системной учетной записи. То, что я не могу найти, - это обходной путь, если он есть.
Кто-нибудь здесь найдет для этого рабочее решение? Любая информация очень ценится.
Догадаться. Вы должны использовать UNC-пути для копирования из удаленных источников и работы в качестве локальной службы. Видимо, на это ответили переполнение стека:
Из http://msdn.microsoft.com/en-us/library/ms685143.aspx:
Служба (или любой процесс, работающий в другом контексте безопасности), который должен получить доступ к удаленному ресурсу, должен использовать имя универсального соглашения об именах (UNC) для доступа к ресурсу. Служба должна иметь соответствующие привилегии для доступа к ресурсу. Если серверная служба использует соединение RPC, на удаленном сервере необходимо включить делегирование.
Буквы дисков не являются глобальными для системы. Каждый сеанс входа в систему получает свой собственный набор букв дисков от A до Z. Следовательно, перенаправленные диски не могут использоваться совместно процессами, запущенными под разными учетными записями пользователей. Более того, служба (или любой процесс, выполняющийся в ее собственном сеансе входа в систему) не может получить доступ к буквам дисков, которые были установлены в рамках другого сеанса входа в систему.
Служба не должна напрямую обращаться к локальным или сетевым ресурсам через сопоставленные буквы дисков, а также не должна вызывать команду net use для сопоставления букв дисков во время выполнения.
Буквы дисков не работают. Поэтому, если вы копируете файлы из wedav / https с включенным ssl, вам необходимо сопоставить источник с помощью UNC:
чистое использование https://test.net/plugins/servlet/confluence/default / пользователь: пароль пользователя
Затем, когда вы выполните команду net use, вы увидите следующее:
C:\Users\Administrator\test>net use
New connections will be remembered.
Status Local Remote Network
-------------------------------------------------------------------------------
\\test.net@SSL\plugins\servlet\conf
luence\default
Web Client Network
The command completed successfully.
Я использовал robo copy для копирования из UNC:
robocopy \\test.ney@SSL\plugins\servlet\confluence\default . /z /e