Пишу сервис. Сервис запускается под системным аккаунтом. Из сервиса пытаюсь открыть файл находящейся в сети. Файл не открывается. Пароля на ресурсе не стоит. Пробовал WNetAddConnection('\\FSERVER\BUH\',NIL,NIL); возвращает ошибку ERROR_INVALID_ADDRESS в чем дело не пойму
Код (Text): nr.dwType:=RESOURCETYPE_ANY; nr.lpLocalName:=NIL; nr.lpRemoteName:='\\FSERVER\BUH'; nr.lpProvider:=NIL; res:=WNetAddConnection2(nr,NIL,'Гость',0); тоже не работает. в этот раз вернула ERROR_ACCESS_DENIED. Очень подозрительно, доступ открыт всем полный доступ. А из-под системной ученой записи не коннектится. Из-под другой учетки (т.е. не сервис а просто приложение) этот же код выполняется на ура. может привилегии какие надо выставить?
более правильно, наверное, так Код (Text): nr.dwType:=RESOURCETYPE_ANY; nr.lpLocalName:=NIL; nr.lpRemoteName:='\\FSERVER\BUH'; nr.lpProvider:=NIL; res:=WNetAddConnection2(nr,'','Guest',0); теперь res==ERROR_NO_SUCH_LOGON_SESSION как создать эту сессию? помогите пожалуйста P.S. причем если в окне сервиса создать объект ShellTreeView, из него зайти в сетевое окружение, то спросив логин и пароль ("Guest" и "" соотв-но), он заходит в эту шару. Далее т.к. логин в шару уже произведен 1С запускается успешно. Это просто подтверждает возможность реализовать сие программно...
На сколько мне ясно это делфи WNetAddConnection2(nr,'','Guest',0); пробовал WNetAddConnection2(nr,nil,'Guest',0);
SteelRat не работат ни так, ни так вопрос остается открытым. Кому неохото возиться с написанием своего теста - вот пример на делфи (оставлен только код относящийся к сабжу - т.е. никаких OLE и пр.). Для быстрого тестирования, основной код вынесен в DLL, которая загружается каждый раз заново _241160500__ServiceTest.rar
Вот тут нашел из-за чего возникает такая проблема http://www.rsdn.ru/Forum/Message.aspx?mid=58260&only=1 из предложенных вариантов решения подходит только №4 Неужели нельзя никак проще. Возникают сомнения, потому что вызов диалогового окна (если с флагом 8) WNetAddConnection2(nr,nil,'Guest',8); все подсоединяет, а без диалогового окна - никак не получается. Может у кого-нибудь есть исходники этой ф-ии? Неужели она вызывает CreateLogonSession()
Системный аккаунт по определению не имеет доступа к сети, из-за этого и все твои проблемы. Тебе нужно запускать сервис под нормальным доменным пользователем. Тогда все будет работать.
Так я пробовал - действительно работает, но, к сожадению, не подходит, т.к. мне нужно из сервиса взаимодействовать с рабочим столом. Если кому интересно, заработало так (не знаю почему, но заработало) - и все под системным аккаунтом! Код (Text): WNetAddConnection2(nr,'','FSERVER\Guest',0); т.е. оказалось просто надо было указать имя пользователя в таком формате. Хотя в MSDN по этому поводу ничего не написано. А я уже полез с Kerberos авторизацией разбираться
Интересно, может под гостем действительно и работает - если аутентификация не требуется. Но в общем случае надо имперсонировать юзера и лезть в сеть под нормальным аккаунтом. А вот делать интерактивный сервис - это уже криво и не секьюрно. MS мягко говоря не рекомендует так делать.