![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TService + TThread + TXMLDocuent [D7, WinXP]
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
А это вообще всуе упомянуто)