![]() |
Fehler beim Öffnen mit Parameter
Wenn mein Programm eine Datei selbst nicht öffnen kann, wird diese als Parameter an eine .exe Datei im selben Ordner wie das Programm übergeben. Danach wird das Programm beendet. Dafür habe ich bisher diesen Code benutzt:
Delphi-Quellcode:
Wobei FileName das Parameter ist. Auf meinem Computer funktioniert das, auf anderen kam es immer wieder zu Zugriffsverletzungen. Was ist am Code falsch? Gibt es eine bessere Möglichkeit?
Shellexecute(0,'open',PCHAR(ExtractFilePath(Application.Exename)+'Vid.exe'),PCHAR(FileName),nil,SW_SHOWNORMAL);
close; |
Re: Fehler beim Öffnen mit Parameter
kann es sein das Filename statisch ist ?
|
Re: Fehler beim Öffnen mit Parameter
Hallo,
Kommt die Zugriffsverletzung in dem Programm, das ShellExecute ausführt, oder in dem anderen Programm? Gruß, ManuMF |
Re: Fehler beim Öffnen mit Parameter
Der Fehler tritt in dem Programm auf, das die Datei ausführt.
|
Re: Fehler beim Öffnen mit Parameter
Vielleicht kannst Du es mal ausprobieren, zwischen dem Shellexecute und dem Close
eine Pause/delay einzubauen. Haben denn die Rechner, bei denen das Problem auftritt, Hyperthreading eingeschaltet? Hyperthreading - eine CPU mit 2 cores. Oder Du kannst mal das hier ausprobieren:
Delphi-Quellcode:
Aufruf:
function ExecFile(filename,params:String;windowState:word):Boolean;
var cmdLine: String; SUInfo: TStartupInfo; ProcInfo: TProcessInformation; begin CmdLine := '"' + Filename + '" ' + Params; FillChar(SUInfo, SizeOf(SUInfo), #0); with SUInfo do begin cb := SizeOf(SUInfo); dwFlags := STARTF_USESHOWWINDOW; wShowWindow := WindowState; end; try result := CreateProcess(NIL, PChar(CmdLine), NIL, NIL, FALSE, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, NIL, PChar(ExtractFilePath(Filename)), SUInfo, ProcInfo); except on E: Exception do begin Result:=false; end; end; end;
Delphi-Quellcode:
Grüße
ExecFile(ExtractFilePath(Application.Exename)+'Vid.exe',FileName,SW_SHOW);
Klaus [edit] code hinzugefügt [/edit] |
Re: Fehler beim Öffnen mit Parameter
Zitat:
Zitat:
Der Aufruf mit CreateProcess hat auch nichts geändert. |
Re: Fehler beim Öffnen mit Parameter
Kann es sein, dass die Datei die du lesen möchtest, noch geöffnet ist ?
|
Re: Fehler beim Öffnen mit Parameter
Was für eine Fehlermeldung/Exception bekommst Du denn?
Kannst Du mit GetlastOSError etwas mehr herausbekommen? Grüße Klaus |
Re: Fehler beim Öffnen mit Parameter
Eine Zugriffsverletzung -> EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 0000003C. Lesen von Adresse 0000003C
|
Re: Fehler beim Öffnen mit Parameter
Delphi-Quellcode:
dieser Code funktionert bei mir ohne Probleme, ich weiß das hilft Dir jetzt nicht viel weiter.
procedure TForm1.Button1Click(Sender: TObject);
var appl,params: String; begin appl := 'firefox.exe'; params := 'E:\development\html\homepage\index.html'; ExecFile(ExtractFilepath(Application.exeName)+'..\..\..\tools\browser\Mozilla Firefox\'+appl,params,SW_SHOW); close; end; Aber kann es sein, daß im onClose noch etwas passiert - das vielleicht so nicht passieren soll? Grüße Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz