Форум: "Основная";
Текущий архив: 2012.01.01;
Скачать: [xml.tar.bz2];
ВнизWindows-service.Некорректное чтение бинарного файла. Найти похожие ветки
← →
ifmomax (2010-07-02 16:52) [0]Всех приветствую!
Наткнулся на следующую проблему.
При запуске windows сервиса в среде DElphi, типизированный бинарный файл читается корректно. Как только сервис инсталлируется и запускается как служба данные читаются некорректно. Перепробовал все возможные варианты создания служб и чтения бинарных файлов, но все тщетно. Прикладываю проект на базе самой простой реализации.
Буду вам очень признателен, если поможете понять в чем здесь дело.
P.S. Экспериментировал с параметром - выравнивание структур(Record Field Alignment), но тщетно. Видимо некий дескриптор установить нужно
unit Unit1;
{$A-}
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
ExtCtrls,Mlog;
type
TAntorTestRead = class(TService)
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
{ procedure ServiceExecute(Sender: TService);}
private
{ Private declarations }
public
function GetServiceController: TServiceController; override;
{ Public declarations }
end;
type
TGPS12Data = record
Atr:Longint; // 4
Latitude:Longint; // 4
longitude:Longint; // 4
end;
var
AntorTestRead: TAntorTestRead;
ReadData: TGPS12Data;
log:TMlog;
myFile: file of TGPS12Data;
implementation
{$R *.DFM}
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
AntorTestRead.Controller(CtrlCode);
end;
function TAntorTestRead.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;
function IntToBin(Value: integer; Digits: integer): string;
var
i: integer;
begin
result := "";
for i := 0 to Digits - 1 do
if Value and (1 shl i) > 0 then
result := "1" + result
else
result := "0" + result;
end;
{procedure TAntorTestRead.ServiceExecute(Sender: TService);
begin
Timer1.Enabled := True;
while not Terminated do
ServiceThread.ProcessRequests(True);// wait for termination
Timer1.Enabled := False;
end;}
procedure TAntorTestRead.Timer1Timer(Sender: TObject);
var
ss:widestring;
i:integer;
begin
ss:=ParamStr(0);
i:=Length(ss)-Length("AntorTest.exe");
ss:=Copy(ss, 1, i);
log:=TMlog.create(ss+"LogFile.log");
AssignFile(myFile, "34701-310510.bin");
FileMode := fmOpenRead;
Reset(myFile);
while not Eof(myFile) do begin
read(myfile,ReadData);
log.mess(inttoBin(ReadData.atr,32));
end;
Timer1.Destroy;
end;
end.
← →
12 © (2010-07-02 17:43) [1]перепишите с FileStream
← →
Leonid Troyanovsky © (2010-07-02 19:09) [2]
> ifmomax (02.07.10 16:52)
> Буду вам очень признателен, если поможете понять в чем здесь
> дело.
Оная простая реализация даже скомпилируется.
> procedure ServiceController(CtrlCode: DWord); stdcall;
> begin
> AntorTestRead.Controller(CtrlCode);
> end;
>
> function TAntorTestRead.GetServiceController: TServiceController;
>
> begin
> Result := ServiceController;
> end;
Что это за?
> Timer1.Enabled := True;
Этот сервис гуев?
> Reset(myFile);
Тема сис.., тьфу, некорректностей не раскрыта.
--
Regards, LVT.
← →
ifmomax (2010-07-02 20:04) [3]Тема некорректностей могла бы быть раскрыта, если бы здесь можно было бы исходники выложить и вы попробовали сравнить значения бинарных файлах при запуске как сервиса и запуске из среды Delphi.
← →
QAZ (2010-07-02 22:56) [4]а винда нибось 7я ...
← →
_Юрий © (2010-07-03 10:50) [5]
procedure TAntorTestRead.Timer1Timer(Sender: TObject);
....
begin
....
Timer1.Destroy;
end;
Смело. Я бы так делать не стал.
По сабжу:
> AssignFile(myFile, "34701-310510.bin");
Полный путь передать?
Кстати, не виртуальный ли диск?
← →
Медвежонок Пятачок © (2010-07-03 22:03) [6]При запуске windows сервиса в среде DElphi, типизированный бинарный файл читается корректно. Как только сервис инсталлируется и запускается как служба данные читаются некорректно.
Это оптический обман.
Когда модуль работает в приложении, то текущий каталог процесса - папка с exe.
Когда модуль работает в сервисе - то текущий каталог процесса уже не папка с сервисом, а папка system32.
← →
ifmomax (2010-07-04 06:43) [7]Спасибо всем огромное!Действительно нужно было всего навсего задать полный путь:)!Как же много тратится времени в поисках сложных решений, на как оказывается в последствии простых задач.
← →
Медвежонок Пятачок © (2010-07-05 13:33) [8]Как же много тратится времени
Ну еще бы...
Проверять результаты вызовов процедур и функций - не царское же это дело.
← →
Anatoly Podgoretsky © (2010-07-05 14:18) [9]А разве тебе не читали лекции об вреде относительных путей?
← →
Rouse_ © (2010-07-05 21:13) [10]
> Anatoly Podgoretsky © (05.07.10 14:18) [9]
>
> А разве тебе не читали лекции об вреде относительных путей?
>
Самое смешное - относительный путь безвреден, будучи применен умелыми руками. Чаще встречается жесткая привязка к статическим путям плана "c:\windows\system32" - а я вот почему-то на диск G: систему ставлю :)
← →
Anatoly Podgoretsky © (2010-07-05 21:54) [11]
> Rouse_ © (05.07.10 21:13) [10]
Ну ты вообще про зверские вещи рассказываешь.
Насчет установки на G:, у меня на серверах можно поставить только на F:
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2012.01.01;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.004 c