Сервис не может получить доступ к подключенному диску

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

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

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

Спасибо


person Rohit    schedule 04.05.2010    source источник


Ответы (3)


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

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

person Remy Lebeau    schedule 04.05.2010
comment
Спасибо за быстрый ответ Реми. Но в требовании указано, что нам нужно использовать подключенные диски вместо пути UNC. Я пробовал использовать пути UNC, и все работает нормально. Примерно 2) - я попробовал следующий сценарий: а) Создал службу и запустил ее от имени какого-то пользователя. б) Вызвал процесс из службы. (По словам Реми, процесс должен выполняться в том же пользовательском контексте, что и для службы.) C) Мне все еще не удалось получить доступ к подключенному диску. :( Моя проблема Срочно нужна помощь. Спасибо - person Rohit; 04.05.2010
comment
Забудьте об этом требовании. Я видел так много из них, которые игнорируют то, что запрещает Microsoft. Рекомендуется UNC-путь. Вы можете видеть, что даже IIS не поддерживает подключенные диски, support.microsoft.com/kb/257174 - person Lex Li; 04.05.2010
comment
Нет никаких преимуществ в использовании буквы подключенного диска по пути UNC, поскольку буква подключенного диска в любом случае сопоставляется с путем UNC. В этой ситуации необходимо ослабить требование. - person Remy Lebeau; 04.05.2010
comment
@Rohit, вы не ответили на мой вопрос по поводу №2 - как именно вы начинаете новый процесс? Есть много разных способов сделать это. Попробуйте использовать CreateProcessAsUser (), чтобы вы также могли использовать CreateEnvironmentBlock () для загрузки среды учетной записи пользователя. - person Remy Lebeau; 04.05.2010
comment
Я считаю, что подключенные диски имеют какую-то буферизацию, которой нет в пути UNC. Подключенные диски часто обеспечивают более быстрый доступ и передачу данных, чем пути UNC. Я этого не подтверждал, только наблюдал. - person Richard; 07.05.2010

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

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

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

net use x: \\SERVERNAME\SHARENAME
person deenaik    schedule 03.12.2012
comment
У меня возникла такая же проблема с сервисом TFSBuildServiceHost. - person JohnZaj; 11.06.2014

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

Ваш сервис может отобразить сам диск.

person Richard    schedule 04.05.2010
comment
Да, но это не означает, что служба имеет доступ к сопоставлениям букв дисков учетной записи пользователя. MSDN даже говорит об этом: support.microsoft.com/kb/180362 - person Remy Lebeau; 04.05.2010
comment
Это не совсем так. Если вы выдадите себя за вошедшего в систему пользователя, вы сможете получить доступ к их сопоставлениям дисков. Однако я думаю, что проще использовать пути UNC. - person Luke; 05.05.2010