Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GPG CreateProcess из сервиса 
:(
    Опции темы
Nimua
Дата 23.11.2007, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 6.9.2007

Репутация: нет
Всего: нет



Здравствуйте,

не уверена что раздел верный...

Есть проблема: есть сервис (служба), в ней иногда вызывается шифрование - вызываю GPG.exe (GnuPG) с помощью CreateProcess

Код

var
    CommandLine: string;
    StartupInfoParam: StartupInfo;
    ProcessInf: PROCESS_INFORMATION;
    ResCode: cardinal;
    EncryptFile: TFileStream;
    text : string;
    IdText: TIdText;
    GPGPath: string;
..............

CommandLine:=GPGPath+'gpg.exe --homedir '+GPGPath+' -z 0 --yes --always-trust '+
                   ' -t -a -e -r ' + KeyPGPName +
                   ' -o '+ Path+FileNamePGP+' '+Path+FileName;
      GetStartUPInfo(StartUpInfoParam);
      StartUpInfoParam.wShowWindow := SW_HIDE;
      if CreateProcess(PAnsiChar(GPGPath+'gpg.exe'),PAnsiChar(CommandLine),nil,nil,false,0,nil,
                    PAnsiChar(ExtractFileDir(Path)),
                    StartUpInfoParam,ProcessInf)
      begin
           WaitForSingleObject(ProcessInf.hProcess,infinite);
           GetExitCodeProcess(ProcessInf.hProcess,ResCode);
           if ResCode=0 then
            .........
      end;


Вот. обычно работает нормально. Но иногда случается вот такая ошибка, точнее получается ResCode не равный нулю

GPG encryption failed. Code: 128 Error: 0

И все. после этого оно на этом застревает, то есть сервис пытается снова обработать файл, и снова ошибка шифрования. и так пока не перезапущу сервис..  smile 


PM MAIL   Вверх
Snowy
Дата 23.11.2007, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Ну что тут посоветовать.
Проблема сервиса. В нём бага.
Могу посоветовать только программно перезапустить сервис при ошибке...
PM MAIL   Вверх
Nimua
Дата 23.11.2007, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 6.9.2007

Репутация: нет
Всего: нет



так сервис то мой : )) 
в смысле TService
как понять в чем именно глюк? 
При чем я не понимаю gpg внешний процесс, как он понимает что его инициирует тот же сервис, в смысле что может меняться при перезапуске сервиса такого что это влияет на CreateProcess??


PM MAIL   Вверх
Rennigth
Дата 23.11.2007, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 8
Всего: 76



Nimua, может происходит так что сервис не закончив рабуту с 
этим процессом пытается запустить его еще раз? А он в свою очередь использет какие-нибудь общие ресурсы... попробуй банально в критическу секцию запихнуть код создания процесса gpg.exe


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Nimua
Дата 23.11.2007, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 6.9.2007

Репутация: нет
Всего: нет



To Rennigth: спасибо, если не поможет, то что сделала попробую.

Прочитала в хелпе (если ничего не помогает прочтите наконец инструкцию), что после завершение CreateProcess обязательно надо делать CloseHandle для хэндлов в PROCESS_INFORMATION. Вставила после получения рес кода

Код

begin
           WaitForSingleObject(ProcessInf.hProcess,infinite);
           GetExitCodeProcess(ProcessInf.hProcess,ResCode);
           CloseHandle(ProcessInf.hProcess);
           CloseHandle(ProcessInf.hThread);


посмотрю, что будет. думаю косяк был в этом.


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0524 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.