-
Добрый день, товарищи!
Имеется простейший код:
DeleteFile('\\SERVER\data\1.txt');
Будучи выполненным в обычном приложении все прекрасно удаляется, однако, при выполнении этой же строчки из службы ничего не происходит. GetLastError дает Access Denied. Понятно, что проблема в правах пользователя. Вопрос - как из под службы получить доступ к данному файлу ?
-
> Serv (08.09.2012 04:02:00) [0]
Запускай службу от имени пользователя, который имеет права доступа до сети и
в той момент когда сеть уже есть.
Программу переделывать не надо.
-
всеж
> GetLastError
лучше обрабатывать всегда при этом подходе...
-
Служба (если это явно не указано в параметрах её запуска) работает с локальными правами и не может залезть в сеть. Чтобы обеспечить сетевой доступ, она (служба) должна породить процесс от имени пользователя с правами доступа в сеть.
-
> Запускай службу от имени пользователя, который имеет права
> доступа до сети и
> в той момент когда сеть уже есть.
Служба запускается автоматически и при ее старте сети может и не быть. Да и запускать службу от пользователя - это, ИМХО, моветон.
> Dimka Maslov © (08.09.12 11:55) [3]
>
> Служба (если это явно не указано в параметрах её запуска)
> работает с локальными правами и не может залезть в сеть.
> Чтобы обеспечить сетевой доступ, она (служба) должна породить
> процесс от имени пользователя с правами доступа в сеть.
Вариант, но не слишком красивый, на мой взгляд. Лишние exe в составе продукта.
-
Итак, небольшой шаг вперед:
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 - нет. Что я упустил ?
-
>Служба запускается автоматически и при ее старте сети может и не быть.
Интересно - как ты собираешься удалять файл в отсутствующей сети?
>Да и запускать службу от пользователя - это, ИМХО, моветон.
Вообще-то пользователи как бы именно для этого, среди прочего создавались.
Что бы через них права пораздавать.
Мы свой сервис запускаем не из-под system, всё работает, как хочется.
>Вариант, но не слишком красивый, на мой взгляд. Лишние exe в составе
продукта.
Согласен.
-
моветон это спросить а после "тупить" на ответ.
не нравится старт от пользователя с правами на сеть? тогда "сносите" винду... она/мелкософт только так и делает. чтобы убедится достаточно глянуть на список сервисов/под кем выполняются.
-
> Дмитрий Белькевич (08.09.12 14:06) [6]
> Интересно - как ты собираешься удалять файл в отсутствующей
> сети?
Почему же в отсутствующей? Анатолий сказал
> Запускай службу от имени пользователя, который имеет права
> доступа до сети и в той момент когда сеть уже есть.
Может я, как высказался sniknik, "туплю на ответ", но из этой фразы следует, что служба должна быть запущена когда сеть уже есть? А если сеть будет подключена позже? Или это значение не имеет - тогда почему такая формулировка ? ;)
> не нравится старт от пользователя с правами на сеть?
Не нравится. Но я с вашего позволения "сносить" винду не буду - она/микрософт может делать как ей угодно - я ее не виню ;)
Если мастера и модераторы позволят, то я бы уточнил свой первоначальный вопрос в формулировке Serv (08.09.12 13:13) [5] :)
-
Почему же в отсутствующей?
это у тебя надо спросить.
Служба запускается автоматически и при ее старте сети может и не быть. Да и запускать службу от пользователя - это, ИМХО, моветон.
сначала говоришь что хочешь удалить сетевой файл, а затем, получив совет, мнешься на счет того, что сети может не быть.
а когда тебя переспрашивают, как же ты собрался удалять сетевой файл без сети, ты говоришь, "как это без сети и куда же она у тебя делась?".
-
> Медвежонок Пятачок © (08.09.12 22:51) [9]
>
> Почему же в отсутствующей?
> это у тебя надо спросить.
Вы дальше этой фразы перечитайте пост - там написано что к чему. Если не поймете - то воздержитесь от комментариев на непонятную тему. Спасибо.
-
я тупизну как-то не перечитываю
-
сказали же, запускай от юзера с правами.
не хочешь от юзера - делай сам из сервиса логон в шару.
но нет. оно умное.
оно хочет дальше мусолить тему.
-
> Медвежонок Пятачок © (08.09.12 23:10) [11]
>
> я тупизну как-то не перечитываю
Это точно. Чукча не читатель. Ты ее пишешь.
> делай сам из сервиса логон в шару.
Вот видишь - уже здравая мысль. Я собственно об этом не спросил, но ответа на это не получил - только вопли.
-
ну все?
ответ получил?
дальше вроде бы как наматывать сопли вокруг пустяка уже и повода нет.
иди программарывай свой чудесный удалятор сетевых файлов
-
> Вот видишь - уже здравая мысль.
логон тоже делается от юзера. то что тебе показалось "здравым" на самом деле "через ... колено" в дополнение к все тем же "граблям".
-
> Медвежонок Пятачок © (08.09.12 23:18) [14]
>
> ну все?
> ответ получил?
Да ты я смотрю вообще читать не умеешь. Зачем же пишешь тогда? Графомания мучает? Так тогда лучше в блокнотике пиши - хоть позориться не придется перед аудиторией.
p.s. Анатолий, удаляйте тему пожалуйста. Придется опять под значком писать, а то медведи-писатели донимают.
-
оно таки хочет дальше мусолить.
-
Оно таки хочет дальше писать. Читать не хочет по-прежнему.
-
и этим высшим приматам еще голубое дают.
при сталине такого не было.
-
При сталине и медведи умнее были, а с тех пор заметно деградировали.
-
Как вариант - имперсонация в network service