Einzelnen Beitrag anzeigen

schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#1

Absturz beim Beenden wenn Thread ausgeführt wurde

  Alt 3. Jan 2010, 19:09
Hi,

ich habe ein Programm, dass per Thread ein ShellExecuteExW ausführt.

Starte ich nun mein Programm und erzeuge keinen Thread und beende es wieder gibt es keine Fehlermeldung.

Starte ich aber das Programm und erzeuge einen ShellExecuteExW Thread um z.B. den Internet Explorer zu starten kommt es zu einer Fehlermeldung beim Beenden des Programmes.

Der Thread wird so erzeugt:
Delphi-Quellcode:
//aufruf im Programm:
                TRunProcess.create(
                  ProgramLocation,
                  ProgramParameter,
                  Show,
                  False);

//der Thread selber:
procedure TRunProcess.Execute;
begin
  { Thread-Code hier einfügen }

  //add to Semaphore list
  WaitForSingleObject(Semaphore, INFINITE);

  ExecAndWait;

  //remove from Semaphore list
  ReleaseSemaphore(Semaphore, 1, nil);

end;

//-------- create (public) ---------------------------------------------
constructor TRunProcess.create(Filename, Params: String;
    WindowState: Word = SW_SHOWNORMAL; Wait : Boolean = False);
begin
  inherited create(True); // CreateSuspended = true
  freeOnTerminate := true;
  fApp := Filename;
  fParam := Params;
  fWindowState := WindowState;
  fWait := Wait;
  fStarted := False;
  fTimeout := False;
  Resume;
end;
Der Thread beendet sich somit nach dem Starten selbst.

Jedoch bekomme ich mit Madexept diese Meldung:
Zitat:
date/time : 2010-01-03, 19:00:20, 521ms
computer name : PRIVAT-PC
user name : Privat <admin>
registered owner : Privat
operating system : Windows 7 build 7600
system language : German
system up time : 2 hours 33 minutes
program up time : 7 seconds
processors : 2x Intel(R) Core(TM)2 CPU 6600 @ 2.40GHz
physical memory : 1234/2046 MB (free/total)
free disk space : (C 25,35 GB (D 55,27 GB
display mode : 1280x1024, 32 bit
process id : $418
allocated memory : 57,54 MB
executable : MyTestApp.exe
exec. date/time : 2010-01-03 18:59
version : 1.0.0.6
compiled with : Delphi 2009
madExcept version : 3.0k
callstack crc : $cfa30757, $59630dee, $185329a6
exception number : 1
exception class : EAccessViolation
exception message : Zugriffsverletzung bei Adresse 0040426C in Modul 'MyTestApp.exe'. Lesen von Adresse FFFFFFFC.

main thread ($157c):
0040426c +008 MyTestApp.exe System 9806 +1 TObject.Free
00578dbe +0d2 MyTestApp.exe acSBUtils 1137 +21 UninitializeACScroll
0057d454 +048 MyTestApp.exe acSBUtils 2915 +7 TacScrollWnd.acWndProc
005826c8 +024 MyTestApp.exe acSBUtils 4483 +2 TacBaseWnd.acWndProc
0057dabe +02a MyTestApp.exe acSBUtils 3055 +8 TacEditWnd.acWndProc
004d5c90 +02c MyTestApp.exe Controls 9063 +3 TWinControl.MainWndProc
0047c338 +014 MyTestApp.exe Classes 12723 +8 StdWndProc
77d5642b +02b ntdll.dll KiUserCallbackDispatcher
004e89bf +073 MyTestApp.exe Forms 3239 +26 TCustomForm.Destroy
0047b533 +047 MyTestApp.exe Classes 11604 +9 TComponent.DestroyComponents
004e6bd1 +035 MyTestApp.exe Forms 1755 +9 DoneApplication
0045b666 +026 MyTestApp.exe SysUtils 3900 +6 DoExitProc
004053dd +021 MyTestApp.exe System 13553 +19 @Halt0
005cfcbc +838 MyTestApp.exe MyTestApp 226 +181 initialization
763c1172 +010 kernel32.dll BaseThreadInitThunk

thread $968:
77d54c1a +0a ntdll.dll NtDelayExecution
760e1870 +4f KERNELBASE.dll SleepEx
760e1813 +0a KERNELBASE.dll Sleep
763c1172 +10 kernel32.dll BaseThreadInitThunk

thread $1688:
77d54c1a +0a ntdll.dll NtDelayExecution
760e1870 +4f KERNELBASE.dll SleepEx
760e1813 +0a KERNELBASE.dll Sleep
763c1172 +10 kernel32.dll BaseThreadInitThunk

thread $11bc:
77d55e7a +0a ntdll.dll NtWaitForWorkViaWorkerFactory
763c1172 +10 kernel32.dll BaseThreadInitThunk

thread $171c:
77d55e7a +0a ntdll.dll NtWaitForWorkViaWorkerFactory
763c1172 +10 kernel32.dll BaseThreadInitThunk

thread $764:
77d55e4a +0a ntdll.dll NtWaitForMultipleObjects
763c1172 +10 kernel32.dll BaseThreadInitThunk

thread $e68:
77d55e7a +0a ntdll.dll NtWaitForWorkViaWorkerFactory
763c1172 +10 kernel32.dll BaseThreadInitThunk

thread $f2c (TLogWriterThread): <priority:-15>
77d55e6a +00a ntdll.dll NtWaitForSingleObject
760e1796 +066 KERNELBASE.dll WaitForSingleObjectEx
763beffe +03e kernel32.dll WaitForSingleObjectEx
763befad +00d kernel32.dll WaitForSingleObject
005a8ccd +229 MyTestApp.exe logwriter 263 +73 TLogWriterThread.Execute
0045587b +02b MyTestApp.exe madExcept HookedTThreadExecute
0047abce +042 MyTestApp.exe Classes 10912 +8 ThreadProc
0040551c +028 MyTestApp.exe System 13771 +33 ThreadWrapper
0045575d +00d MyTestApp.exe madExcept CallThreadProcSafe
004557c7 +037 MyTestApp.exe madExcept ThreadExceptFrame
763c1172 +010 kernel32.dll BaseThreadInitThunk
>> created by main thread ($157c) at:
005a8690 +03c MyTestApp.exe logwriter 85 +1 TLogWriterThread.Create

disassembling:
00404264 public System.TObject.Free: ; function entry point
00404264 9805 test eax, eax
00404266 jz loc_40426f
00404268 9806 mov dl, 1
0040426a mov ecx, [eax]
0040426c > call dword ptr [ecx-4]
0040426f 9807 ret
Ich komm einfach nicht drauf an was es liegen könnte???
Delphi 2010, Update 4 & 5
  Mit Zitat antworten Zitat