2010-05-04 3 views
1

Я читал на многих форумах, что подключенные диски недоступны из службы, поскольку ни один пользователь не вошел в систему.Служба не может получить доступ к сопоставленному диску

Вопрос 1) Я попытался сделать свою услугу в качестве входа в систему - как с учетной записью, и у меня был сетевой диск, указанный в этой самой учетной записи. Служба по-прежнему не может получить к ней доступ. Зачем?

Вопрос 2) Из того же устройства я вызываю другой процесс. Под какой учетной записью пользователя будет выполняться процесс?

Благодаря

ответ

4

1) Использование UNC пути вместо этого, то вам не нужен доступ к отображенным буквам. Что касается того, почему вы не можете получить к ним доступ даже при работе в одной учетной записи, трудно сказать точно, не видя своего фактического кода.

2) это зависит от того, как вы запускаете процесс. Если вы используете ShellExecute() или CreateProcess(), он запускается в учетной записи пользователя вызывающего потока. Если вы используете CreateProcessAsUser(), CreateProcessWithLogonW() или CreateProcessWithTokenW(), то он работает в учетной записи пользователя, который вы передаете в.

+0

Благодарим за быстрый ответ Remy. Но в требовании указано, что нам нужно использовать сопоставленные диски вместо UNC-пути. Я пробовал использовать UNC-пути и весь его рабочий режим. Около 2) - Я пробовал следующую ситуацию: a) Создал сервис и работал как некоторый пользователь. b) Вызывается процесс из службы. (Согласно Реми, процесс должен выполняться в том же контексте пользователя, что и для службы.) c) Мне все еще не удалось получить доступ к подключенному диску. :(Мой плохой Спасибо – Rohit

+0

Забудьте об этом требовании. Я видел так много из них, что пренебрегают тем, что Microsoft запрещает. Рекомендуется UNC-путь. Вы можете видеть, что даже IIS не поддерживает подключенные диски, http: //support.microsoft.com/kb/257174 –

+0

Нет смысла использовать сопоставленную букву диска по пути UNC, так как сопоставленная буква диска в любом случае будет отображаться на UNC-пути. В этой ситуации необходимо ослабить требование. –

0

услуга, не имеет доступ к отображенным дискам на XP и выше, так как отображенные диски для каждого пользователя ресурса, так они зависят от того, кто вошел в систему. Поскольку возможно, что никто не может войти в систему, возможно, что нет подключенных дисков.

Ваш сервис может отображать сам накопитель.

+0

Но вы можете настроить службу для входа в систему как пользователя. правильно? – Rohit

+0

Да, но это не значит, что служба имеет доступ к сопоставлениям букв диска учетной записи пользователя. MSDN даже говорит так: http://support.microsoft.com/kb/180362 –

+0

Это не совсем так. Если вы выдаете себя за зарегистрированного пользователя, вы сможете получить доступ к их сопоставлениям с дисками. Я думаю, что более просто использовать UNC-пути. – Luke

1

Я столкнулся с аналогичной проблемой, запущенной JBoss в сервисном режиме, мой Java-код не смог получить доступ к Mapped Drive, даже если я выполняю службу даже после изменения параметра «Войти как:» тому же пользователю, который отобразил водить машину.

Тогда я понял, что если я смогу сопоставить диск с использованием той же службы, то он должен работать.

И, наконец, добавление простой команды поверх файла service.bat разрешило проблему.

net use x: \\SERVERNAME\SHARENAME 
+0

У меня возникла такая же проблема с сервисом TFSBuildServiceHost. – JohnZaj