Win32 a Win64 > Obecné

predinstalovany HP minitower - problem s ukladanim html souboru

(1/3) > >>

Hdm:
Ahoj,
mám program napsaný v Delphi a jednou funkcí je ukládání do souboru s koncovkou html.
Všude to funguje(rúzné verze windows včetně Win7profi), problém je pouze na sestavě:
HP minitower 8100 s předinstalovým Windows 7 profi 32bit i 64bit (přesnější popis stroje zákazník zatím nedodal)
Na stroji je prý nainstalovaný různý HP pomocný SW
Soubor to do umístění nevytvoří/neuloží a program žádnou chybu nehlásí, přestože je ukládání v chráněné části kódu. Toto by mohlo taky znamenat, že soubor vytvoří, ale hned ho něco smázne.
Soubory s koncovkami TXT, LOG, INI to vytvoří bez problémů.

Zkoušeli jsme:

* přidat plná práva na složku
* spustit jako administrator (zkoušeli jsme i doménového admina)
* dokonce jsme PC odebrali z domény a spustit jak administrator s plným přístupem na složku
* všechny predchozí pokusy i s programem v jiných složkách
* Program na jiné sestavě(jiné PC) ve stejné doméně funguje správně
* PC jsme přeinstalovali/obnovili systém z backup oblasti, takže žádný jiný SW tam není kromě HP pomocných SW
Nemáte někdo nějakou zkušenost s podobným problémem a jak to vyřešit?. Řešení ve smyslu nainstalovat tam čistý OS z CD a ne z HP backup oblast zákazník moc nevítá.i

pf1957:

--- Citace: Hdm  22-04-2013, 08:22:06 ---Soubor to do umístění nevytvoří/neuloží a program žádnou chybu nehlásí, přestože je ukládání v chráněné části kódu. Toto by mohlo taky znamenat, že soubor vytvoří, ale hned ho něco smázne.

--- Konce citace ---
A FileMon na to rika co?

Hdm:
Pokročil jsem ve zkoumání problému.
Jde o ukládání TstringList.SaveToFile z vedlejšího vlákna. Zkoušel jsem přesně toto ukládání obalit kritickou sekcí, ale nepomohlo.
Uložení z hlavního vlákna proběhne v pořádku, ale ten samý TstringList se uloží prázdný(to co naplnilo vedlejší vlákno tam není)


--- Kód: ---      ...
      EnterCriticalSection(tmpLock);
      try
        SL.SaveToFile(ExtractFilePath(ParamStr(0)) + SL_Name);
      except
        on E : Exception do
        begin
          WriteToLog(E.ClassName + ' - ' + E.Message);
        end;
      end;         
      LeaveCriticalSection(tmpLock);
      ...

--- Konec kódu ---

pf1957:

--- Citace: Hdm  15-05-2013, 13:38:15 ---Pokročil jsem ve zkoumání problému.
Jde o ukládání TstringList.SaveToFile z vedlejšího vlákna. Zkoušel jsem přesně toto ukládání obalit kritickou sekcí, ale nepomohlo.
Uložení z hlavního vlákna proběhne v pořádku, ale ten samý TstringList se uloží prázdný(to co naplnilo vedlejší vlákno tam není)

--- Konce citace ---
Takova kontrolni otazka: tu (jednu, spolecnou) kritickou sekci jsi dal ke kazdemu zapisu v aplikaci? Zadnou chybu to nikde nehlasi?

Lepsi reseni je otevrit se ten soubor jako stream v exclusive modu a misto SaveToFile pouzit SaveToStream. A po kazde I/O operaci zkontrolovat vysledek, a pro ACCESS_DENNIED pres nejaky retry mechanismus po nejake dobe operaci zopakovat.

Mi.Chal.:
Jestli to chápu dobře, tak jeden StringList plníš z více vláken? Je StringList thread-safe (mělo by to být napsané v dokumentaci, podle diskuzí typu http://objectmix.com/delphi/633638-do-tstringlist-add-tstringlist-delete-methods-threadsafe.html není), případně přístup k němu synchronizován?

Navigace

[0] Seznam témat

[#] Další strana

Přejít na plnou verzi