Hallo Zusammen,
ich schreibe zur Zeit ein Programm, dass PDFs zu SWF Konvertieren soll. Es nutzt dazu das Programm FlashPrinter von Adobe. Im Prinzip läuft es so ab:
Dateiliste erstellen -> Datei aus liste nehmen -> FlashPrinter starten und warten (maximal 20 Minuten) -> Fertig? -> Nächste Datei
|
|
---> Prozess hängt? ( > 20 Mins) -> Prozess killen und nächste Datei
Klappt ja alles Kundebar, nur dass Killen klappt nicht...ich nutze zur Zeit das hier zum killen:
Delphi-Quellcode:
KillProcess(PID: DWord): Bool;
var
hProcess: THandle;
begin
hProcess := OpenProcess(PROCESS_TERMINATE, False, PID);
Result := TerminateProcess(hProcess, 0);
end;
Delphi-Quellcode:
GetProcessID(Exename: string): DWORD;
var
hProcSnap: THandle;
pe32: TProcessEntry32;
begin
result := 0;
hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
if hProcSnap <> INVALID_HANDLE_VALUE then
begin
pe32.dwSize := SizeOf(ProcessEntry32);
if Process32First(hProcSnap, pe32) = true then
begin
while Process32Next(hProcSnap, pe32) = true do
begin
if pos(Exename, pe32.szExeFile) <> 0 then
result := pe32.th32ProcessID;
end;
end;
CloseHandle(hProcSnap);
end;
end;
Delphi-Quellcode:
ProcessExists(ExeName: String): Boolean;
var
I: Integer;
hSnap: THandle;
ProcEntry: TProcessEntry32;
s: String;
ProcList: TStringList;
begin
ProcList := TStringList.Create;
ProcList.BeginUpdate;
ProcList.Clear;
hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnap <> INVALID_HANDLE_VALUE) then
begin
ProcEntry.dwSize := SizeOf(ProcessEntry32);
if (Process32First(hSnap, ProcEntry)) then
begin
s := ExtractFileName(ProcEntry.szExeFile);
proclist.Add(s);
while Process32Next(hSnap, ProcEntry) do
begin
s := ExtractFileName(ProcEntry.szExeFile);
proclist.Add(s);
end;
end;
end;
CloseHandle(hSnap);
ProcList.EndUpdate;
if (ProcList.IndexOf(ExtractFileName(ExeName)) > 0) then
result := true
else
result := false;
ProcList.Destroy;
end;
Delphi-Quellcode:
App = 'FlashPrinter2.exe';
while ProcessExists(App) do
begin
sleep(5000);
KillProcess(GetProcessID(App));
end;
also wird solange der Kill Befehl alle 5 Sekunden aufgerufen, bis der Prozess nachgibt..nur tut er das nie..mein Programm hängt sich quasi mit auf, wenn der Flashprinter streikt.
Gibt es eine möglichkeit den hängenden FlashPrinter abzuschießen?
Wäre echt super, müsst halt gut klappen, weil ich hab da um die 45 000 PDFs zu konvertieren (ich Programmier das ja eigentlich nicht für mich selber, sondern für die Firma wo ich arbeite, da fallen so viele PDFs an...rechnerisch würde das Programm ca 8 Tage dauerlaufen..also suche ich ne Zuverlässige Lösung)...Und jezz bitte keine Scherze wie :
Zitat:
Zitat:
.also suche ich ne Zuverlässige Lösung
Dann nimm kein Windows
Auch wenn ich für Windows nicht meine Hand ins feuer lege: 1. So sind nunmal meine Vorgaben - man muss lernen damit zu arbeiten, was man bekommt, 2. Wenn mans richtig macht, kann man auch mit Windows was anfangen.
Wie auch immer - vielen Dank für eure Hilfe =)
Viele Grüße,
Sebastian