Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fehler beim Öffnen mit Parameter (https://www.delphipraxis.net/70204-fehler-beim-oeffnen-mit-parameter.html)

E307 26. Mai 2006 19:12


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:
 Shellexecute(0,'open',PCHAR(ExtractFilePath(Application.Exename)+'Vid.exe'),PCHAR(FileName),nil,SW_SHOWNORMAL);
    close;
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?

pacman1986 26. Mai 2006 20:08

Re: Fehler beim Öffnen mit Parameter
 
kann es sein das Filename statisch ist ?

ManuMF 26. Mai 2006 21:06

Re: Fehler beim Öffnen mit Parameter
 
Hallo,

Kommt die Zugriffsverletzung in dem Programm, das ShellExecute ausführt, oder in dem anderen Programm?

Gruß,
ManuMF

E307 27. Mai 2006 16:09

Re: Fehler beim Öffnen mit Parameter
 
Der Fehler tritt in dem Programm auf, das die Datei ausführt.

Klaus01 27. Mai 2006 16:15

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:
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;
Aufruf:
Delphi-Quellcode:
ExecFile(ExtractFilePath(Application.Exename)+'Vid.exe',FileName,SW_SHOW);
Grüße
Klaus

[edit] code hinzugefügt [/edit]

E307 27. Mai 2006 18:02

Re: Fehler beim Öffnen mit Parameter
 
Zitat:

Vielleicht kannst Du es mal ausprobieren, zwischen dem Shellexecute und dem Close
eine Pause/delay einzubauen.
Das habe ich vorher schon versucht. sleep() mit verschidenen Werten hat nichts genützt.
Zitat:

Haben denn die Rechner, bei denen das Problem auftritt, Hypertrading eingeschaltet?
Was ist das? Der Fehler tritt jetzt auf allen Rechnern auf.


Der Aufruf mit CreateProcess hat auch nichts geändert.

MrKnogge 27. Mai 2006 18:05

Re: Fehler beim Öffnen mit Parameter
 
Kann es sein, dass die Datei die du lesen möchtest, noch geöffnet ist ?

Klaus01 27. Mai 2006 20:04

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

E307 28. Mai 2006 16:03

Re: Fehler beim Öffnen mit Parameter
 
Eine Zugriffsverletzung -> EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 0000003C. Lesen von Adresse 0000003C

Klaus01 28. Mai 2006 17:12

Re: Fehler beim Öffnen mit Parameter
 
Delphi-Quellcode:
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;
dieser Code funktionert bei mir ohne Probleme, ich weiß das hilft Dir jetzt nicht viel weiter.
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 03:38 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz