Назад | Перейти на главную страницу

net use обнаруживает «Произошла системная ошибка 67». при попытке сопоставить скрипт, запущенный как сервис

У меня работает служба на 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