Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2014, 10:15   #1
Dimonnik
Пользователь
 
Аватар для Dimonnik
 
Регистрация: 30.01.2014
Сообщений: 20
Вопрос Сервис приложение Delphi

Добрый день! Я совсем чайник в Delphi, при этом прочитал не мало постов по своей проблеме. Прошу не пинать!!!

Итак: задача и суть проблемы!
Задача заключается в следующем. Необходима служба, которая бдит определенную папку (из своих настроек в реестре), как только там появляется файлик, она читает его и удаляет.

Суть проблемы:
Я написал сервис, все необходимые процедуры и функции... но при попытке открытия файла reset(f) служба останавливается...

вот кусок кода
procedure ScanFolder();
var

DirInfo: TSearchRec;
ResultFile: integer;
F :=TextFile;

begin
ResultFile := FindFirst(mDir+'*.*', faAnyFile, DirInfo);

//if i = 0 then DeleteFile(mDir+DirInfo.Name);
//if ResultFile = 0 then
//ParseFile(mDir+DirInfo.Name,DirInfo .Name);
// DeleteFile(mDir+DirInfo.Name);
while ResultFile = 0 do
begin
if FileExists(mDir+DirInfo.Name) then
begin
try
AssignFile(f,'D:\LOG.txt');
reset(f); //Тут валится служба

... действия над содержимым файла

CloseFile(f);
DeleteFile(mDir+DirInfo.Name);
except
mlog('Ошибка загрузки данных в файл '+mDir+DirInfo.Name);
end;
end
end;
FindClose(DirInfo);
end;
Тяжела и неказиста жизнь у Димы программиста

Последний раз редактировалось Dimonnik; 30.01.2014 в 10:23.
Dimonnik вне форума Ответить с цитированием
Старый 30.01.2014, 11:23   #2
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Код:
var
...
F :=TextFile;
Ничего странного не замечаете? Присвоение в объявлении переменной, например?
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 30.01.2014, 11:38   #3
Dimonnik
Пользователь
 
Аватар для Dimonnik
 
Регистрация: 30.01.2014
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Vanta11a Посмотреть сообщение
Код:
var
...
F :=TextFile;
Ничего странного не замечаете? Присвоение в объявлении переменной, например?
Спасибо за ответ! Прошу прощения, писал кусок ручками поэтому опечатался, в самом коде все хорошо - проверил)

Это не решило проблему(((
Тяжела и неказиста жизнь у Димы программиста
Dimonnik вне форума Ответить с цитированием
Старый 30.01.2014, 11:48   #4
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

А точно к моменту вызова функции reset() файл существует и не открыт чем-то еще?
Что за ошибка выпадает? Что говорит точка останова?
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 30.01.2014, 11:55   #5
Dimonnik
Пользователь
 
Аватар для Dimonnik
 
Регистрация: 30.01.2014
Сообщений: 20
По умолчанию

Да, файл существует и больше никем (ничем) не открыт. Как отладить работающую службу?

При чем я больше чем уверен в том, что если бы я писал обычное приложение, то это бы отработало без ошибок. А вот с сервис-приложением приходится туго((
Тяжела и неказиста жизнь у Димы программиста
Dimonnik вне форума Ответить с цитированием
Старый 30.01.2014, 12:04   #6
Dimonnik
Пользователь
 
Аватар для Dimonnik
 
Регистрация: 30.01.2014
Сообщений: 20
По умолчанию

Приведу более детальный код в надежде что найдется тот Гуру программист, который сможет наставить меня на путь истинный...

procedure ScanFolder();
var

DirInfo: TSearchRec;
ResultFile: integer;
F :TextFile;

begin
ResultFile := FindFirst(mDir+'*.*', faAnyFile, DirInfo);
while ResultFile = 0 do
begin
if FileExists(mDir+DirInfo.Name) then
begin
try
AssignFile(f,'D:\LOG.txt');
reset(f); //Тут валится служба

... действия над содержимым файла

CloseFile(f);
DeleteFile(mDir+DirInfo.Name);
except
mlog('Ошибка открытия файла '+mDir+DirInfo.Name);
end;
end
end;
FindClose(DirInfo);
end;




procedure TSMSServer.ServiceExecute(Sender: TService);
const
SecBetweenRuns = 5;
var
Count: integer;
begin
Count := 0;
while not Terminated do
begin
Inc(Count);
if Count >= SecBetweenRuns then
begin
Count := 0;
ScanFolder();
end;
Sleep(1000);
ServiceThread.ProcessRequests(False );
end;
end;
Тяжела и неказиста жизнь у Димы программиста
Dimonnik вне форума Ответить с цитированием
Старый 30.01.2014, 12:09   #7
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
Как отладить работающую службу?
делаете простую программу и отлаживаете потом в сервис, либо приатачиться к процессу службы (если получиться)

ну и конечно про ошибку тут лучше ничего не говорите, а то украдут ее, а она судя по всему супер секретная, и логи которые тут тоже не показывайте - подсудное дело.


Цитата:
except
mlog('Ошибка открытия файла '+mDir+DirInfo.Name);
end;
и еще, этот код ненужный его можно смело выбросить
eval вне форума Ответить с цитированием
Старый 30.01.2014, 12:13   #8
Dimonnik
Пользователь
 
Аватар для Dimonnik
 
Регистрация: 30.01.2014
Сообщений: 20
По умолчанию

Ничего секретного тут нет. Я делаю все тоже самое в обычном приложение - РАБОТАЕТ!

Цитата:
except
mlog('Ошибка открытия файла '+mDir+DirInfo.Name);
end;
Это для себя делал в рабочем коде он совсем не нужен понимаю....
Тяжела и неказиста жизнь у Димы программиста
Dimonnik вне форума Ответить с цитированием
Старый 30.01.2014, 12:18   #9
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
Это для себя делал в рабочем коде он совсем не нужен понимаю....
это вы сделали чтобы в системных логах не показывалась реальная ошибка, понимаю...
eval вне форума Ответить с цитированием
Старый 30.01.2014, 12:26   #10
Dimonnik
Пользователь
 
Аватар для Dimonnik
 
Регистрация: 30.01.2014
Сообщений: 20
По умолчанию

Реальная ошибка все отображается и выглядит следующим образом:

Не удается найти описание для идентификатора события 0 из источника Project1.exe. Вызывающий данное событие компонент не установлен на этом локальном компьютере или поврежден. Установите или восстановите компонент на локальном компьютере.

Процесс службы не может установить связь с контроллером службы
Тяжела и неказиста жизнь у Димы программиста
Dimonnik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
И как сервис и как программа одновременно(C++ => Delphi) Человек_Борща Общие вопросы Delphi 5 09.12.2018 13:23
Превратить десткоп приложение на делфи в интернет-сервис Dennis777 Общие вопросы Delphi 12 09.12.2013 17:07
Delphi приложение Homadrom Фриланс 3 12.05.2012 13:46
Приложение Delphi RuVarez Общие вопросы Delphi 6 03.09.2010 13:23