Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TService + TThread + TXMLDocuent [D7, WinXP]


Страницы:   1 2

iXT ©   (2007-02-16 15:29:00) 

Приветствую!

Проблемка появилась.
Делаю службу. Та создает поток. В потоке создается TXMLDocument приблизительно так:


CoInitialize(nil);
XML:=TXMLDocument.Create(nil);
XML.FileName:='\\ServerName\.......\file.xml';
XML.Active:=true;

for i:= 0 to XML.DocumentElement.ChildNodes.Count- 1 do
...


На выделенном участке возникает AV, причем Active=true в этот момент.
xml-фаил правильный, если с ним работать как с VCL на форме, то никаких проблем не возникает.
У кого есть соображения по этому поводу?


iXT   (2007-02-16 16:41:00) [21]


> Плохиш ©   (16.02.07 16:26) [7]

Спасибо!
щас попробую


iXT   (2007-02-16 16:40:00) [22]


> Умение хотя бы элементарно пользоваться отладчиком - оно
> рулез)

И как пробежаться отладчиком по сервису?


> Reindeer Moss Eater ©   (16.02.07 16:05) [4]
> if FileExists(AFileName) then
> xml.Load(AFileName)
>
> Если к тому же файл на сетевом томе, то просто нет прав
> на файл для сервиса

Ни то и не другое
Если файла нет, то при active ругается что не найден
Права тоже все есть. Кроме того, для очистки совести:

> Пробывал xml с локального диска грузить - результат тот
> же
> Т.е. Файл есть, он рабочий и при обычной работе с ним Count=1


Плохиш   (2007-02-16 16:26:00) [23]


> iXT ©   (16.02.07 15:29)  

Дарю :-)

procedure TXMLClass.Open(AFileName: string; CreateIfNotExists: Boolean = True);
begin
 if XML <> nil then XML.Free;
 XML := TXMLDocument.Create(self);
 try
   XML.Options := [doNodeAutoCreate, doAttrNull, doAutoPrefix, doNamespaceDecl];
   XML.ParseOptions := [];
   XML.DOMVendor := GetDOMVendor('');

   fPath := AFileName;
   if FileExists(fPath) then
   begin
     XML.LoadFromFile(fPath);
   end
   else
   begin
     XML.XML.Clear;
     XML.Active := true;
     XML.Version := '1.0';
     XML.Encoding := 'UTF-8';
     XML.StandAlone := 'no';
     XML.AddChild('xml');
     if CreateIfNotExists then XML.SaveToFile(fPath);
   end;
   Opened := true;
 except
   XML.Free;
   XML := nil;
   Opened := false;
   raise;
 end;
end;


Self на nil сам заменишь, да и к своим нуждам привяжешь.


Сергей М.   (2007-02-16 16:14:00) [24]


> Да это до этого на CoInitialize ругался.


А кого оно интересует ?)


> Вылетает AV, хотя XML<>nil


XML-то не nil) ...
DocumentElement = nil !

Умение хотя бы элементарно пользоваться отладчиком - оно рулез)


Сергей М.   (2007-02-16 16:14:00) [25]


> Да это до этого на CoInitialize ругался.


А кого оно интересует ?)


> Вылетает AV, хотя XML<>nil


XML-то не nil) ...
DocumentElement = nil !

Умение хотя бы элементарно пользоваться отладчиком - оно рулез)


Reindeer Moss Eater   (2007-02-16 16:05:00) [26]

if FileExists(AFileName) then
xml.Load(AFileName)

Если к тому же файл на сетевом томе, то просто нет прав на файл для сервиса


iXT   (2007-02-16 16:03:00) [27]


> А это вообще всуе упомянуто)

Да это до этого на CoInitialize ругался. Мало ли еще чего из этой оперы OLE

> 1. XML.DocumentElement = nil
>
> Либо
> 2. XML.DocumentElement.ChildNodes = nil


if XML.DocumentElement = nil
 Вылетает AV, хотя XML<>nil
Пробывал xml с локального диска грузить - результат тот же
Т.е. Файл есть, он рабочий и при обычной работе с ним Count=1


Сергей М.   (2007-02-16 15:32:00) [28]


> У кого есть соображения по этому поводу?


Соображения-то примитивные, мог бы и сам дотумкать)... На то отладчик тебе дан)

Либо
1. XML.DocumentElement = nil

Либо
2. XML.DocumentElement.ChildNodes = nil

Третьего не дано.


Сергей М.   (2007-02-16 15:32:00) [29]


> TService + TThread


А это вообще всуе упомянуто)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо