Конференция "WinAPI" » Странное поведение FileExists в сервисе.
 
  • Дмитрий Белькевич (24.08.11 17:04) [0]
    FileExists для файлов, расположенных на расшаренных дисках, возвращает False. Почему так происходит? У пользователя 'system' не хватает каких-то прав? Под обычным админом всё нормально на тех же файлах. Операционка - Win 2003 сервер.
  • sniknik © (24.08.11 17:07) [1]
    проверь, запусти сервис от "обычного админа"...
  • Дмитрий Белькевич (24.08.11 17:08) [2]

    > проверь, запусти сервис от "обычного админа"...


    Как? Если просто запустить экзешник - то он не стартует как сервис, но - файлы доступны. Как запустит экзешник как сервис не из-под system?
  • sniknik © (24.08.11 17:11) [3]
    в сервис менеджере, запустить от имени ...
  • sniknik © (24.08.11 17:12) [4]
    вернее "с учетной записью" в "вход в систему"
  • Дмитрий Белькевич (24.08.11 17:16) [5]
    точно, спасибо - попробую
  • sniknik © (24.08.11 17:23) [6]
    и кстати в сервисе еще не помешало бы зависимость от сетевых служб поставить... если проверка идет на старте. ну и если оно вообще там работает, что после пробы выше выяснится.
  • Дмитрий Белькевич (24.08.11 17:24) [7]
    Под администратором - то же самое, FileExists  возвращает False. Но - когда я запускаю программу просто из консоли (из Far'а) - то FileExists работает нормально, хотя программа запускается тоже под записью 'Administrator' (смотрю по Task Manager).
  • Дмитрий Белькевич (24.08.11 17:25) [8]

    > и кстати в сервисе еще не помешало бы зависимость от сетевых
    > служб поставить... если проверка идет на старте


    Нет - во время работы.
  • Дмитрий Белькевич (24.08.11 17:31) [9]
    Если это имеет значение - то на сервере поднят домен. Запись админа, под которой я локально вхожу - это скорее всего администратор домена.
  • Anatoly Podgoretsky © (24.08.11 19:21) [10]
    Предположения тут не катят. Но это должен быть пользователь обладающий достаточными правами, и как минимум право доступа к сети. Я обычно использую NETWORK SERVICES - это как раз запись для подобных дел.
  • Дмитрий Белькевич (24.08.11 21:52) [11]
    То есть - у system может не быть доступа к сети?
  • DVM © (24.08.11 22:23) [12]

    > Дмитрий Белькевич   (24.08.11 21:52) [11]
    > То есть - у system может не быть доступа к сети?

    У него 100% нет доступа по сети и это правильно.
  • Игорь Шевченко © (24.08.11 23:41) [13]
    Дмитрий Белькевич   (24.08.11 17:24) [7]

    У тебя есть права на перечисление имен в сетевом каталоге, у сервиса нет.
    К тому же не озвучено полное имя файла, существование которого ты пытаешься узнать. Фраза "расшаренный диск" может подразумевать несколько толкований, зачем ты заставляешь нас гадать ?
  • Дмитрий Белькевич (25.08.11 08:44) [14]

    > К тому же не озвучено полное имя файла, существование которого
    > ты пытаешься узнать. Фраза "расшаренный диск" может подразумевать
    > несколько толкований, зачем ты заставляешь нас гадать ?


    Ну вот например: w:\123.txt. Файл существует, расположен на диске 'w', w - это подключенный из сети диск.
  • Дмитрий Белькевич (25.08.11 08:45) [15]
    Но это частный случай. Может быть и так: \\comp1\vol1\123.txt
  • han_malign (25.08.11 08:49) [16]

    > и кстати в сервисе еще не помешало бы зависимость от сетевых служб поставить...

    - для доступа к сетевым ресурсам LanmanWorkstation нужно прописать:

    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MyService]
    "DependOnService"=hex(7):4c,00,61,00,6e,00,6d,00,61,00,6e,00,57,00,6f,00,72,00,\
     6b,00,73,00,74,00,61,00,74,00,69,00,6f,00,6e,00,00,00,00,00

  • Игорь Шевченко © (25.08.11 09:57) [17]

    > Ну вот например: w:\123.txt. Файл существует, расположен
    > на диске 'w', w - это подключенный из сети диск.


    System-у никто не сказал net use w: а тебе это сказали.

    Для того, чтобы видеть файлы в каталогах типа \\server\share
    сервису лучше всего запускаться от учетной записи, которой даны права на такой каталог.

    Собственно я на эти грабли сколько-то лет назад тоже наступал, потому делюсь опытом
  • Дмитрий Белькевич (25.08.11 11:09) [18]
    Спасибо за ответы. Как лучше ситуацию разрешить? А у NETWORK SERVICES будет доступ к w: ? Или лучше под каким-то локальным пользователем стартовать сервис? Или net use делать или еще что-то?
  • Вариант (25.08.11 11:51) [19]

    > Дмитрий Белькевич   (25.08.11 11:09) [18]


    >  А у NETWORK SERVICES будет доступ к w: ? .....

    Ткнуть два раза мышкой  не судьба, что бы проверить?
  • Дмитрий Белькевич (25.08.11 12:10) [20]

    > Ткнуть два раза мышкой  не судьба, что бы проверить?


    Пробовал запустить от NETWORK SERVICE. Результат:

    An object(User) with the following name cannot be found: "NETWORK SERVICE".

    Гуглю, что серверу не так...
  • Вариант (25.08.11 12:27) [21]

    > Дмитрий Белькевич   (25.08.11 12:10) [20]

    Имя не так.
    Администрирование - > Службы-> Твоя Служба ->Свойства->Вход в систему ->
    Обзор->Дополнительно->Поиск -> Выбери из списка(не ошибешься в имени)

    Или смотри встроенные имена в MSDN  в services в user accounts.
  • Дмитрий Белькевич (25.08.11 13:54) [22]
    Пробую запустить тестовое приложение под NETWORK SERVICE на другом компьютере, win 2008 сервер. От 2003-го списка пользователей так и не смог добиться.
    Результат отрицательный - не видит и w:\ и \\server\folder\
  • Дмитрий Белькевич (25.08.11 13:57) [23]
    Более того - даже под записью Administrator не видит файлов. Только под ограниченным пользователем, из-под которого стартую FAR.
  • Дмитрий Белькевич (25.08.11 14:00) [24]
    Нужно на шару перелогиниваться под админом, тогда файлы нормально видно.
  • Вариант (25.08.11 15:09) [25]
    У меня сервис работает с шарой под любым именем имеющим права на доступ к нужному мне каталогу, в том числе и под Network Service (NT AUTHORITY\NetworkService).  Это уже дело админа  с какой учеткой запускать сервис и кому давать права на доступ к каталогу.
  • Дмитрий Белькевич (25.08.11 18:09) [26]
    Хорошо. Как лучше тогда распространять софт - сервис? Устанавливать по дефолту под system (как сейчас), а дальше пусть админы сами разбираются?
  • sniknik © (25.08.11 20:46) [27]
    зачем сервису на "чужой" диск, по расшарке? подумай, может оно и не нужно вовсе.
    пусть например ставят прямо на том компе для которого диск локальный...

    > а дальше пусть админы сами разбираются?
    не дальше, а прямо сразу, в установщике попросить выбрать юзера с соответствующими правами... и вот если подсунули бесправного, пусть разбираются.
  • Дмитрий Белькевич (26.08.11 16:54) [28]

    > зачем сервису на "чужой" диск, по расшарке? подумай, может
    > оно и не нужно вовсе.


    Надо, можно сказать, что это и есть одна из главных его функций, если не самая - с внешними хранилищами файлов работать.

    Сидят два горячих финских парня на берегу озера, рыбу ловят. Тут один и говорит:
    - Слушай, Куукконнен, я слышал ты построил дом?
    - Да, Юкканнен, построил.
    - А сколько комнат в твоем доме?
    - Одна, Юкканнен, меньше не имело смысла.


    > не дальше, а прямо сразу, в установщике попросить выбрать
    > юзера с соответствующими правами...


    Хорошо, а как потом указать, что сервис запускается от определенного пользователя? /install знаю - так он ставится сразу под system. А как его под другим юзером поставить?
  • Игорь Шевченко © (26.08.11 17:44) [29]

    > А как его под другим юзером поставить?


    Очевидно так:

    http://msdn.microsoft.com/en-us/library/ms682450(v=vs.85).aspx
  • Дмитрий Белькевич (26.08.11 18:50) [30]
    Ясно, буду разбираться, всем спасибо.
 
Конференция "WinAPI" » Странное поведение FileExists в сервисе.
Есть новые Нет новых   [134431   +10][b:0][p:0.002]