Я читал на многих форумах, что подключенные диски недоступны из службы, поскольку ни один пользователь не вошел в систему.
Вопрос 1) Я попытался сделать свою службу в качестве входа в систему - в качестве какой-то учетной записи, и у меня был сетевой диск, подключенный к этой самой учетной записи. Сервис по-прежнему не может получить к нему доступ. Почему?
Вопрос 2) Из того же сервиса я вызываю другой процесс. Под какой учетной записью пользователя будет запускаться процесс?
Спасибо
Ответ 1 · рейтинг 4 · Remy Lebeau
1) Используйте вместо этого UNC-пути, тогда вам не нужен доступ к подключенным буквам дисков. Что касается того, почему вы не можете получить к ним доступ даже при работе в одной и той же учетной записи, трудно сказать наверняка, не увидев фактический код.
2) это зависит от того, как вы запускаете процесс. Если вы используете ShellExecute() или CreateProcess(), то он запускается в учетной записи пользователя вызывающего потока. Если вы используете CreateProcessAsUser(), CreateProcessWithLogonW() или CreateProcessWithTokenW(), то он запускается в той учетной записи, которую вы передаете.
Ответ 2 · рейтинг 1 · deenaik
Я столкнулся с аналогичной проблемой при запуске JBoss в сервисном режиме, мой Java-код не мог получить доступ к подключенному диску, даже если я выполняю службу даже после изменения параметра "Войти как:" для того же пользователя, который подключил диск.
Затем я понял, что если я могу подключить диск с помощью той же службы, он должен работать.
И, наконец, добавление простой команды в верхней части файла service.bat решило проблему.
net use x: \\SERVERNAME\SHARENAME
Ответ 3 · Richard
Службы не имеют доступа к подключенным дискам в XP и более поздних версиях, поскольку подключенные диски являются ресурсом для каждого пользователя, поэтому они зависят от того, кто вошел в систему. Поскольку никто не может войти в систему, возможно, что подключенных дисков нет диски.
Ваш сервис может отобразить сам диск.