Хотелось бы, чтобы этот подход работал, но на самом деле это не от службы; Я бился над этой проблемой довольно сильно, но безрезультатно. Проблема двоякая:
- Из службы Windows для сопоставления дисков, видимых другим пользователям, необходимо «войти» в систему как учетная запись «Локальная система» (по умолчанию) с установленным свойством «Взаимодействовать с рабочим столом».
- Чтобы иметь возможность общаться с ClearCase, процесс службы Windows должен войти в систему как обычный пользователь с доступом ClearCase (например, в группе атриумов).
Итак, (1) и (2) являются взаимоисключающими, но вы должны сделать и то, и другое, а не можете. Для (2), вероятно, причина, по которой вы не можете «Взаимодействовать с рабочим столом» и сопоставить диски, заключается в том, что вам нужен сеанс / токен входа в систему, который должен присутствовать для работы подключенных дисков - связанный сеанс пользователя - -Но службы должны быть в состоянии работать без головы (никто не вошел в систему) там, где не существует "сеанса" / токена.
Обратите внимание, что Rational BuildForge решает эту проблему для ClearCase, порождая совершенно новый дочерний процесс исключительно для того, чтобы его служба могла общаться с ClearCase:
Также обратите внимание, что «сеанс входа в систему» идентифицируется уникальным токеном; это означает, что даже если у вас есть процесс, запущенный от имени нужного пользователя (домен \ fred), который может получить доступ к ClearCase, он порождает новый процесс оттуда как тот же пользователь (домен \ fred) ) может не иметь одного и того же токена сеанса по умолчанию, в зависимости от того, как он был создан (т. е. CreateProcess (), CreateProcessAsUser () и CreateProcessWithLogonW ()), что усложняет работу с инструментами, которые вы не контролируете. Чтобы продемонстрировать это, попробуйте запустить 'runas / user: "cmd / k \" net use \ "" "из командной строки, и вы увидите все ваши сетевые диски в списке как" Недоступно "(!!).
Возможно (хотя явно не рекомендовано Microsoft), прилагая большие усилия, заставить все это работать, если вам удастся каким-то образом заставить пользователя всегда входить в систему, чтобы получить токен сеанса , как описано здесь:
запуск процесса с повышенными правами UAC из неинтерактивной службы (win32 / .net / powershell)
В противном случае вам придется эмулировать его, как это делает BuildForge.
Также см .:
Для такого рода проблем я обычно сталкиваюсь с серверами CI (CC.NET / Hudson / TeamCity), которые работают как служба Windows. Мне нужно было убедиться, что где-то до того, как моя настоящая «работа» была запущена, я написал сценарий для сопоставления сетевых дисков, переставив их во время выполнения или сопоставив M: \ с доступной буквой диска с subst (очень утомительно). ), как описывает VonC, который не является постоянным (даже если вы используете «net use / persistent: yes»), на что, я полагаю, вы тоже надеялись.