Проблема при создании демона(сервиса) в Lazarus

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Проблема при создании демона(сервиса) в Lazarus

Сообщение gvido » 12.10.2016 22:50:27

Народ, Приветки Всем!!! Я вернулся с Глупым вопросом по службе в Windows.
Можно ли программно заполнить- изменить поле DaemonDef.Description? Если можно, то как?
Смысл простой - если вписать дискрипшин на этапе проектирования в среде по русски, то как всегда в описании службы получим кракозяблы.
Единственно, как получилось вывести русский текст в описании сервиса - правка lfm вне среды и последующая загрузка проекта.
gvido
постоялец
 
Сообщения: 188
Зарегистрирован: 28.03.2012 11:35:31

Re: Проблема при создании демона(сервиса) в Lazarus

Сообщение and » 14.10.2016 16:08:24

gvido писал(а):если вписать дискрипшин на этапе проектирования в среде по русски, то как всегда в описании службы получим кракозяблы
Описание - не самая значимая проблема. Те же грабли будут и с названием сервиса, и с аргументами - короче, везде, где идёт обмен строками с WinAPI.
Я решал правкой daemonapp.inc - в частности, все строки в методе TCustomDaemonApplication.SysInstallDaemon. Например:
Код: Выделить всё
      SD:=DD.Description;
      SetCodePage(rawByteString(sd),GetACP,true); //вставить эту строку
      D.lpDescription:=Pchar(SD);
      ChangeServiceConfig2(SV,SERVICE_CONFIG_DESCRIPTION,@D);
Всё не доходят руки оформить всё это как положено и выложить на bugs.freepascal.org :-(
Аватара пользователя
and
постоялец
 
Сообщения: 124
Зарегистрирован: 16.09.2009 17:11:01
Откуда: г. Гомель, Беларусь

Re: Проблема при создании демона(сервиса) в Lazarus

Сообщение gvido » 14.10.2016 18:25:54

Спасибо.
Я редко лезу в исходники с правкой. Иногда приходится.
Но тут похоже выбор небольшой. :)
Еще раз спасибо!!!
gvido
постоялец
 
Сообщения: 188
Зарегистрирован: 28.03.2012 11:35:31

Re: Проблема при создании демона(сервиса) в Lazarus

Сообщение and » 14.10.2016 19:47:44

gvido писал(а):Я редко лезу в исходники с правкой. Иногда приходится.
Но тут похоже выбор небольшой. :)
Я не любил править сырцы в Delphi. Всегда предпочитал обходные манёвры: наследование, хак-классы и прочие костыли.
Но Lazarus и FPC - дело другое. Это открытые проекты, правки (и их публикация, конечно) - процесс не просто допустимый, но и "богоугодный" :-) Я пользуюсь продуктом сообщества, помочь в меру своих сил развитию продукта - просто-напросто правильно.
Поэтому я стараюсь не просто отрепортить о найденном баге или отсутствующей фиче, а приложить патч. К сожалению, не всегда получается :-(
 
Если дальше от рассуждений и ближе к сабжу. Проблема вылезла при переходе к строкам с кодовой страницей. "Демонический" пакет активно работает с pChar'ами. В них кодовой страницы по понятным причинам нет. Вот RTL и считает, что это строка со страницей по умолчанию - т.е. UTF-8. Поэтому приходится директивно указывать, что это ACP (для "входящих" строк) или перекодировать в ACP (для "исходящих").
Аватара пользователя
and
постоялец
 
Сообщения: 124
Зарегистрирован: 16.09.2009 17:11:01
Откуда: г. Гомель, Беларусь

Re: Проблема при создании демона(сервиса) в Lazarus

Сообщение gvido » 15.10.2016 14:03:14

Что-то вставка не прокатила... Сервис пишу в lazarus 1.6 под windows 10 x64 ver 1607 rus.
В win 10 заметил, что не всегда срабатывает корректно перекодировка utf8 в 1251 через utf8tosys. Напоролся на это с перекодировкой путей с кириллицей. Выкрутился через utf8toWINCP.

По сервису еще вопрос. В примерах что в инете навалом и в том что идет с лазарусом, при установке скомпилированного сервиса можно указывать расположение конфигурационного файла сервиса (service.exe --install --config=d:\2\service.cfg). Сервис устанавливается без проблем, но опускается параметр пути к конфигурационному файлу.

Это тоже недопил в daemonapp.inc?
gvido
постоялец
 
Сообщения: 188
Зарегистрирован: 28.03.2012 11:35:31

Re: Проблема при создании демона(сервиса) в Lazarus

Сообщение and » 15.10.2016 18:24:46

gvido писал(а):не всегда срабатывает корректно перекодировка utf8 в 1251 через utf8tosys. Напоролся на это с перекодировкой путей с кириллицей. Выкрутился через utf8toWINCP
Я поэтому и пользуюсь в последнее время в основном SetCodePage. Она позволяет разруливать даже ситуации, когда страница исходной строки выставлена неверно: первый вызов с false в последнем параметре, чтобы правильно выставить страницу, второй - с true для перекодирования.

Про конфиг - не знаю, не пробовал.
Аватара пользователя
and
постоялец
 
Сообщения: 124
Зарегистрирован: 16.09.2009 17:11:01
Откуда: г. Гомель, Беларусь

Re: Проблема при создании демона(сервиса) в Lazarus

Сообщение Лекс Айрин » 15.10.2016 18:36:49

gvido писал(а):В win 10 заметил, что не всегда срабатывает корректно перекодировка utf8 в 1251 через utf8tosys.


Вообще-то, для этого есть функции работающие с путями прямо в UTF8.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Проблема при создании демона(сервиса) в Lazarus

Сообщение gvido » 15.10.2016 21:28:47

Лекс Айрин писал(а):Вообще-то, для этого есть функции работающие с путями прямо в UTF8

Я тоже на это надеялся. И когда передавал utf8 в качестве пути в мониторинга файловой системы, то только принудительная перекодировка помогла, к сожалению.

Добавлено спустя 1 час 20 минут 3 секунды:
and писал(а):
gvido писал(а):не всегда срабатывает корректно перекодировка utf8 в 1251 через utf8tosys. Напоролся на это с перекодировкой путей с кириллицей. Выкрутился через utf8toWINCP
Я поэтому и пользуюсь в последнее время в основном SetCodePage. Она позволяет разруливать даже ситуации, когда страница исходной строки выставлена неверно: первый вызов с false в последнем параметре, чтобы правильно выставить страницу, второй - с true для перекодирования.

Про конфиг - не знаю, не пробовал.


Извиняюсь, дико!!! Вставка сработала. Я, валенок, забыл снести ppu lazdaemon.
gvido
постоялец
 
Сообщения: 188
Зарегистрирован: 28.03.2012 11:35:31

Re: Проблема при создании демона(сервиса) в Lazarus

Сообщение Лекс Айрин » 17.10.2016 09:31:17

gvido писал(а):Я тоже на это надеялся.


Надеяться мало -- их еще использовать надо. Если, конечно, пути берутся от самой системы, а не из внешней dll.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Проблема при создании демона(сервиса) в Lazarus

Сообщение gvido » 17.10.2016 12:39:10

Лекс Айрин писал(а):
gvido писал(а):Я тоже на это надеялся.


Надеяться мало -- их еще использовать надо. Если, конечно, пути берутся от самой системы, а не из внешней dll.


В моем случае они передаются в функцию из cfg файла в UTF8 кодировке или с текстового поля формы в функцию, которая ожидает Pchar.
gvido
постоялец
 
Сообщения: 188
Зарегистрирован: 28.03.2012 11:35:31

Re: Проблема при создании демона(сервиса) в Lazarus

Сообщение Лекс Айрин » 17.10.2016 13:18:31

значит, никаких проблем не должно быть.
модуль LazFileUtils:
Код: Выделить всё
function FileExistsUTF8(const Filename: string): boolean;
function FileAgeUTF8(const FileName: string): Longint;
function DirectoryExistsUTF8(const Directory: string): Boolean;
function ExpandFileNameUTF8(const FileName: string; {const} BaseDir: string = ''): string;
function FindFirstUTF8(const Path: string; Attr: Longint; out Rslt: TSearchRec): Longint;
function FindNextUTF8(var Rslt: TSearchRec): Longint;
procedure FindCloseUTF8(var F: TSearchrec); inline;
function FileSetDateUTF8(const FileName: String; Age: Longint): Longint;
function FileGetAttrUTF8(const FileName: String): Longint;
function FileSetAttrUTF8(const Filename: String; Attr: longint): Longint;
function DeleteFileUTF8(const FileName: String): Boolean;
function RenameFileUTF8(const OldName, NewName: String): Boolean;
function FileSearchUTF8(const Name, DirList : String; ImplicitCurrentDir : Boolean = True): String;
function FileIsReadOnlyUTF8(const FileName: String): Boolean;
function GetCurrentDirUTF8: String;
function SetCurrentDirUTF8(const NewDir: String): Boolean;
function CreateDirUTF8(const NewDir: String): Boolean;
function RemoveDirUTF8(const Dir: String): Boolean;
function ForceDirectoriesUTF8(const Dir: string): Boolean; 
...
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Проблема при создании демона(сервиса) в Lazarus

Сообщение gvido » 17.10.2016 14:04:59

Вот это без UTF8toWinCP не понимала:
Код: Выделить всё
HandleChange := CreateFile(PChar(UTF8ToWinCP(FFolderPath)),{FILE_LIST_DIRECTORY}GENERIC_READ,
    FILE_SHARE_READ or FILE_SHARE_DELETE or FILE_SHARE_WRITE,
    nil,
    OPEN_EXISTING,
    FILE_FLAG_BACKUP_SEMANTICS or
    FILE_FLAG_OVERLAPPED, 0);
gvido
постоялец
 
Сообщения: 188
Зарегистрирован: 28.03.2012 11:35:31

Re: Проблема при создании демона(сервиса) в Lazarus

Сообщение Лекс Айрин » 17.10.2016 14:07:51

gvido

там же...

Код: Выделить всё
function FileCreateUTF8(Const FileName : string) : THandle; overload;
function FileCreateUTF8(Const FileName : string; Rights: Cardinal) : THandle; overload;
Function FileCreateUtf8(Const FileName : String; ShareMode : Integer; Rights : Cardinal) : THandle; overload;


Добавлено спустя 1 минуту 43 секунды:
судя по всему, старая функция создания файла осталась неизменной еще с досовских времен... вместе с соглашениями о кодировках и пр...
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Проблема при создании демона(сервиса) в Lazarus

Сообщение Alex2013 » 17.10.2016 14:21:46

Интересно, а имеет-ли смысл упрятать веб-сервер в демона или сервис :?: :roll:
Чем вообще отличаются сервисы от обычной программы умеющей сворачиваться в трей ?
Alex2013
долгожитель
 
Сообщения: 3145
Зарегистрирован: 03.04.2013 11:59:44

Re: Проблема при создании демона(сервиса) в Lazarus

Сообщение gvido » 17.10.2016 14:41:09

имеет, смыл, если нужно чтобы работало без входа пользователя в систему.
У меня как раз такая задача. Нужно мониторить папки на создание файлов. Сначала думал через findfirst сделать, а потом решил, что ловить событие файловой системы будет лучше.
gvido
постоялец
 
Сообщения: 188
Зарегистрирован: 28.03.2012 11:35:31

Пред.След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 235

Рейтинг@Mail.ru
cron