как подключить сетевой диск для Clearcase View в службе Windows?

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


person ankit    schedule 24.02.2010    source источник


Ответы (2)


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

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

чтобы сопоставить представление с буквой диска.

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

  • вы используете свою учетную запись Windows (а не «локальную системную учетную запись»)
  • динамический вид уже запущен (и виден в диске точки монтирования M:\ MVFS)
person VonC    schedule 24.02.2010
comment
Работает ли использование вашей учетной записи для подключения диска в W7? Мне еще не приходилось этого делать. - person Paul Nathan; 24.02.2010
comment
@ Пол: не уверен. Я сейчас на работе, поэтому использую Windows XP. Кроме того, ClearCase пока не поддерживает официально W7. - person VonC; 24.02.2010
comment
@VonC: Очень верно и правильно. Но я думаю, что поддержка W7 появится очень скоро, так что это следует учитывать (если, конечно, коробка не будет посвящена XP на срок службы системы). - person Paul Nathan; 24.02.2010
comment
Привет, VonC, я использую службу Windows в учетной записи LocalSystem. я сопоставил вид в чистом виде на P: диске на машине A. и я хочу сопоставить тот же вид в чистом виде на машине B на диске P:, но с использованием службы Windows. Как я могу это сделать? я использовал команду «Net use», и это не сработало. - person ankit; 24.02.2010
comment
@ankit: это моя точка зрения. Вы должны использовать не 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
comment
@Vonc: здесь у меня динамический сценарий. то, что я хочу, это то, что я хочу отобразить другое представление для приложения. Означает, что в какой-то момент мое приложение получит доступ к View1, а после его завершения может захотеть получить доступ к View2. Итак, здесь мне нужно изменить имя представления для того же сеанса пользователя внутри службы Windows. - person ankit; 24.02.2010
comment
@ankit: не могли бы вы объяснить мне, зачем здесь нужна служба Widows? В любом случае: чтобы удалить существующую общую папку, просто выполните net share P: /DELETE, а затем создайте новую общую папку для View2. Это можно сделать с помощью сценариев в $PATH и легко вызвать из сеанса DOS. - person VonC; 24.02.2010
comment
Серверы непрерывной интеграции (CI) хотят работать как служба Windows — это одна из причин, по которой это необходимо. - person Garen; 13.12.2011
comment
Шаблон «net share:» синтаксически неверен в соответствии с Windows, кто-нибудь действительно заставил его работать? - person Garen; 13.12.2011
comment
@Garen: хороший момент, на самом деле это subst, а не net share. Я отредактировал ответ. - person VonC; 13.12.2011

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

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

person Garen    schedule 12.12.2011