Я хочу отобразить представление в чистом виде на сетевом диске внутри службы Windows.
Я пробовал с помощью команды net use
, но это не сработало должным образом.
как подключить сетевой диск для Clearcase View в службе Windows?
Ответы (2)
Вы должны иметь возможность запускать команды того же типа, что и используемые при пути слишком длинные, то есть subst
:
subst X: c:\path\to\my\View # for snapshot view
subst X: M:\myView # for dynamic view
чтобы сопоставить представление с буквой диска.
Это должно работать из службы при условии, что:
- вы используете свою учетную запись Windows (а не «локальную системную учетную запись»)
- динамический вид уже запущен (и виден в диске точки монтирования
M:\
MVFS
)
net use
, а net share
. Примечание. Если цель состоит в том, чтобы отображать этот путь в каждом сеансе Windows, было бы проще инкапсулировать его в сценарий и скопировать этот сценарий в стартовый каталог вашего профиля, чтобы создавать общий доступ при каждом входе в систему. (C:\Document and Settings\MyLogin\Start Menu\Programs\Startup
или C:\Users\MyLogin\Start Menu\Programs\Startup
)
- person VonC; 24.02.2010
net share P: /DELETE
, а затем создайте новую общую папку для View2. Это можно сделать с помощью сценариев в $PATH и легко вызвать из сеанса DOS.
- person VonC; 24.02.2010
subst
, а не net share
. Я отредактировал ответ.
- person VonC; 13.12.2011
Я бы хотел, чтобы этот подход работал, но на самом деле это не работает со службой; Я довольно сильно боролся с этой проблемой, но безрезультатно. Проблема двоякая:
- Из службы Windows, чтобы иметь возможность отображать диски, видимые другим пользователям, необходимо «Войти» в качестве учетной записи «Локальная система» (по умолчанию) с установленным свойством «Взаимодействовать с рабочим столом».
- Чтобы иметь возможность общаться с ClearCase, процесс службы Windows должен «войти в систему» как обычный пользователь с доступом ClearCase (например, обычно в группе atria).
Итак, (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»), на что, я думаю, вы тоже надеялись.