Как подключить сетевой диск для Clearcase View в службе Windows? - PullRequest
2 голосов
/ 24 февраля 2010

Я хочу отобразить прозрачный вид на сетевой диск внутри службы Windows.
Я пробовал с net use командой, но она не работала должным образом.

Ответы [ 2 ]

1 голос
/ 13 декабря 2011

Хотелось бы, чтобы этот подход работал, но на самом деле это не от службы; Я бился над этой проблемой довольно сильно, но безрезультатно. Проблема двоякая:

  1. Из службы Windows для сопоставления дисков, видимых другим пользователям, необходимо «войти» в систему как учетная запись «Локальная система» (по умолчанию) с установленным свойством «Взаимодействовать с рабочим столом».
  2. Чтобы иметь возможность общаться с 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»), на что, я полагаю, вы тоже надеялись.

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

Вы должны быть в состоянии выполнить команду того же типа, что и , используемая, когда пути слишком длинные , что составляет subst:

subst X: c:\path\to\my\View # for snapshot view
subst X: M:\myView # for dynamic view

для сопоставления вида с буквой диска.

Это должно работать изнутри службы при условии:

  • Вы используете свою учетную запись Windows (а не «Локальную системную учетную запись»)
  • динамический вид уже запущен (и виден на диске M:\ MVFS):
...