Brak mi już sił i nerwów:
Mam usługę która czyta plik csv(wygenerowany na innym kompie, ale ścieżka jest lokalna) i zapisuje zawartość do bazy. Musiałem zainstalować ją teraz na Win7 i zaczęły się cuda, na XP działało dobrze...
Cały czas dostaję wyjątek - * brak dostępu do pliku* bla bla (tam gdzie jest WorkBooks.Open)
- Wyłączyłem UACa
- Otwieram plik z parametrem do odczytu
- ustawiłem uprawnienia w katalogu w którym są pliki na full access dla każdej grupy (sprawdziłem - kopiowany plik ma full_access)
- zalogowałem usługę z kontem administratora
I oczywiście nic to nie dało !! W aplikacji typu okienko działa dobrze. Z kolei u kumpla na Win7, plik otwiera poprawnie.
Zauważyłem też, że jeśli ja stworzę własny plik CSV to wtedy działa - stąd wniosek że "pluje się" o to, że plik został stworzony na innym komputerze.
To jest samplowy kod, którym testuje to otwarcie pliku:
procedure TService1.ServiceCreate(Sender: TObject);
var
Path, Log, Ex, Ex2: string;
Excel: OleVariant;
F: TextFile;
OK : Boolean;
begin
OK := True;
Path := ExtractFileDir(ParamStr(0));
Log := Path + '\log.txt';
Ex := Path + '\plik.csv';
Ex2 := Path + '\tmp.csv';
CopyFile(PChar(Ex), PChar(Ex2), False);
AssignFile(F, Log);
Rewrite(F);
Excel := CreateOleObject('Excel.Application');
Excel.DisplayAlerts := False;
if FileExists(Ex2) then
begin
Append(F);
WriteLn(F, 'Plik istneije');
CloseFile(F);
end
else
begin
Append(F);
WriteLn(F, 'Plik nie istneije');
CloseFile(F);
end;
try
Excel.WorkBooks.Open(Ex2, True, True);
except on E: Exception do
begin
Append(F);
WriteLn(F, E.Message);
CloseFile(F);
OK := False;
end;
end;
if OK then
begin
Append(F);
WriteLn(F, Excel.Cells[1,1]);
CloseFile(F);
end;
Excel.Quit;
Excel := UnAssigned;
end;