Тут столько "косяков", что даже не знаю с чего начать.
1. Использовать Timer в сервисе нельзя.
2. Всю работу сервиса надо выносить в отдельный поток.
3. Получение имени файла можно сделать более надежно:
Код:
FileName := ExtractFilePath(ParamStr(0)) + 'LogFile.log';
4. А вы уверены, что файл, который читается под сервисом (34701-310510.bin) и файл который вам надо считать это один и тот же файл? Надо собирать полное имя файла, что бы небыло неоднозначностей.
5. Есть еще вероятность, что вы и читаете неправильно, т.к. тип записи, возможно, должен быть определен как packed record. А это влияет на распределение памяти - возможно здесь и порылась собака.
6. Ну а уж вывов Timer1.Destroy; это вообще ни в какие ворота в этом месте... этот код вообще должен падать нафиг.
7. Не уничтожается объект log. Это не страшно, но чать лога может бьть потеряна. Хотя бы принудительно надо освобождать буфер лога.