Конференция "Сети" » Удаление файла по сети из службы [WinXP]
 
  • Serv (08.09.12 04:02) [0]
    Добрый день, товарищи!
    Имеется простейший код:

    DeleteFile('\\SERVER\data\1.txt');


    Будучи выполненным в обычном приложении все прекрасно удаляется, однако, при выполнении этой же строчки из службы ничего не происходит. GetLastError дает Access Denied. Понятно, что проблема в правах пользователя. Вопрос - как из под службы получить доступ к данному файлу ?
  • Anatoly Podgoretsky © (08.09.12 08:16) [1]
    > Serv  (08.09.2012 04:02:00)  [0]

    Запускай службу от имени пользователя, который имеет права доступа до сети и
    в той момент когда сеть уже есть.
    Программу переделывать не надо.
  • brother © (08.09.12 09:02) [2]
    всеж
    > GetLastError

    лучше обрабатывать всегда при этом подходе...
  • Dimka Maslov © (08.09.12 11:55) [3]
    Служба (если это явно не указано в параметрах её запуска) работает с локальными правами и не может залезть в сеть. Чтобы обеспечить сетевой доступ, она (служба) должна породить процесс от имени пользователя с правами доступа в сеть.
  • Serv (08.09.12 13:07) [4]

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

    Служба запускается автоматически и при ее старте сети может и не быть. Да и запускать службу от пользователя - это, ИМХО, моветон.


    >  Dimka Maslov ©   (08.09.12 11:55) [3]
    >
    > Служба (если это явно не указано в параметрах её запуска)
    > работает с локальными правами и не может залезть в сеть.
    >  Чтобы обеспечить сетевой доступ, она (служба) должна породить
    > процесс от имени пользователя с правами доступа в сеть.

    Вариант, но не слишком красивый, на мой взгляд. Лишние exe в составе продукта.
  • Serv (08.09.12 13:13) [5]
    Итак, небольшой шаг вперед:

    var
     Res: TNetResource;
    begin
     ZeroMemory(@Res, sizeof(Res));
     Res.dwType := RESOURCETYPE_ANY;
     Res.lpLocalName := nil;
     Res.lpRemoteName := PWideChar(ExcludeTrailingPathDelimiter(ExtractFilePath(FileName)));
     Res.lpProvider := nil;
     CheckOSError(WNetAddConnection2(Res, '', 'guest', CONNECT_TEMPORARY) = NO_ERROR);
     CheckOSError(DeleteFile(FileName));
    end;



    Vista, Win7 - работает. XP - нет. Что я упустил ?
  • Дмитрий Белькевич (08.09.12 14:06) [6]
    >Служба запускается автоматически и при ее старте сети может и не быть.

    Интересно - как ты собираешься удалять файл в отсутствующей сети?

    >Да и запускать службу от пользователя - это, ИМХО, моветон.

    Вообще-то пользователи как бы именно для этого, среди прочего создавались.
    Что бы через них права пораздавать.
    Мы свой сервис запускаем не из-под system, всё работает, как хочется.

    >Вариант, но не слишком красивый, на мой взгляд. Лишние exe в составе
    продукта.

    Согласен.
  • sniknik © (08.09.12 17:33) [7]
    моветон это спросить а после "тупить" на ответ.
    не нравится старт от пользователя с правами на сеть? тогда "сносите" винду... она/мелкософт  только так и делает. чтобы убедится достаточно глянуть на список сервисов/под кем выполняются.
  • Serv (08.09.12 22:21) [8]

    > Дмитрий Белькевич   (08.09.12 14:06) [6]
    > Интересно - как ты собираешься удалять файл в отсутствующей
    > сети?

    Почему же в отсутствующей? Анатолий сказал

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

    Может я, как высказался sniknik, "туплю на ответ", но из этой фразы следует, что служба должна быть запущена когда сеть уже есть? А если сеть будет подключена позже? Или это значение не имеет - тогда почему такая формулировка ? ;)


    > не нравится старт от пользователя с правами на сеть?

    Не нравится. Но я с вашего позволения "сносить" винду не буду - она/микрософт может делать как ей угодно - я ее не виню ;)

    Если мастера и модераторы позволят, то я бы уточнил свой первоначальный вопрос в формулировке Serv   (08.09.12 13:13) [5] :)
  • Медвежонок Пятачок © (08.09.12 22:51) [9]
    Почему же в отсутствующей?  


    это у тебя надо спросить.

    Служба запускается автоматически и при ее старте сети может и не быть. Да и запускать службу от пользователя - это, ИМХО, моветон.


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

    а когда тебя переспрашивают, как же ты собрался удалять сетевой файл без сети, ты говоришь, "как это без сети и куда же она у тебя делась?".
  • Serv (08.09.12 23:08) [10]

    > Медвежонок Пятачок ©   (08.09.12 22:51) [9]
    >
    > Почему же в отсутствующей?  
    > это у тебя надо спросить.

    Вы дальше этой фразы перечитайте пост - там написано что к чему. Если не поймете - то воздержитесь от комментариев на непонятную тему. Спасибо.
  • Медвежонок Пятачок © (08.09.12 23:10) [11]
    я тупизну как-то не перечитываю
  • Медвежонок Пятачок © (08.09.12 23:11) [12]
    сказали же, запускай от юзера с правами.
    не хочешь от юзера - делай сам из сервиса логон в шару.

    но нет. оно умное.
    оно хочет дальше мусолить тему.
  • Serv (08.09.12 23:14) [13]

    > Медвежонок Пятачок ©   (08.09.12 23:10) [11]
    >
    > я тупизну как-то не перечитываю

    Это точно. Чукча не читатель. Ты ее пишешь.


    > делай сам из сервиса логон в шару.

    Вот видишь - уже здравая мысль. Я собственно об этом не спросил, но ответа на это не получил - только вопли.
  • Медвежонок Пятачок © (08.09.12 23:18) [14]
    ну все?
    ответ получил?
    дальше вроде бы как наматывать сопли  вокруг пустяка уже и повода нет.
    иди программарывай свой чудесный удалятор сетевых файлов
  • sniknik © (08.09.12 23:22) [15]
    > Вот видишь - уже здравая мысль.
    логон тоже делается от юзера. то что тебе показалось "здравым" на самом деле "через ... колено" в дополнение к все тем же "граблям".
  • Serv (08.09.12 23:23) [16]

    > Медвежонок Пятачок ©   (08.09.12 23:18) [14]
    >
    > ну все?
    > ответ получил?

    Да ты я смотрю вообще читать не умеешь. Зачем же пишешь тогда? Графомания мучает? Так тогда лучше в блокнотике пиши - хоть позориться не придется перед аудиторией.

    p.s. Анатолий, удаляйте тему пожалуйста. Придется опять под значком писать, а то медведи-писатели донимают.
  • Медвежонок Пятачок © (08.09.12 23:28) [17]
    оно таки хочет дальше мусолить.
  • Almaz © (08.09.12 23:31) [18]
    Оно таки хочет дальше писать. Читать не хочет по-прежнему.
  • Медвежонок Пятачок © (09.09.12 00:02) [19]
    и этим высшим приматам еще голубое дают.
    при сталине такого не было.
 
Конференция "Сети" » Удаление файла по сети из службы [WinXP]
Есть новые Нет новых   [134435   +20][b:0][p:0.001]