![]() |
Problem mit Shellexecute
Hallo,
ich habe eine Problem mit dem Ausführen einer anderen Anwendung mit Hilfe von Shellexecute. Die Anwendung kann wohl in verschiedenen Modi gestartet werden, d.h. wenn man den Pfad zur Anwendung nicht richtig übergibt startet anstelle ds Programmes das Setup. Leider gibt es auch keine Parameter für die .exe die das unterdrücken würden. Soweit ich das Verstanden habe wird über solche API aufrufe das Programm dass man starten möchte irgendwie im Verzeichnis der eigenen Exe Datei ausgeführt. Wenn ich nun also meine Exe Datei in das Programm Verzeichnis der Anwendung kopiere und diese dann über Shellexecute aufrufe dann klappt das Alles problemlos. Befindet sich meine Exe Datei aber in einer Überordner dann startet das Setup. das funktioniert wenn sich beide Dateien im selben Verzeichnis befinden:
Delphi-Quellcode:
und das klappt dann nicht, obwohl es das eigentlich sollte :(
ShellExecute(0, 'open', PChar('fremde.exe'), nil, nil, SW_SHOWNORMAL)
Delphi-Quellcode:
Jemand vielleicht eine Idee wie man das lösen kann?
ShellExecute(0, 'open', PChar(ExtractFilePath(Application.ExeName) + 'Unterordner\fremde.exe'), nil, PChar(ExtractFilePath(Application.ExeName) + 'Unterordner\'), SW_SHOWNORMAL)
Ich hab schon fast jede erdenkliche Kombination ausprobiert. =( |
Re: Problem mit Shellexecute
Was ist denn ein "Überordner"? Meinst Du das übergeordnete Verzeichnis Deines Programmpfads?
|
Re: Problem mit Shellexecute
oh :D also in dem fall ein übergeordnetes verzeichnis
der anwendung die ich starten will |
Re: Problem mit Shellexecute
Probier mal, ob das geht:
Delphi-Quellcode:
ShellExecute(0, 'open', PChar(ExtractFilePath(Application.ExeName) + '..\Unterordner\fremde.exe'), nil, PChar(ExtractFilePath(Application.ExeName) + '..\Unterordner\'), SW_SHOWNORMAL);
|
Re: Problem mit Shellexecute
Hallo,
versuch' mal per chdir vor dem Aufruf des Programmes in das Verzeichnis des aufzurufenden Programmes zu wechseln und nach dem Aufruf wieder per chdir zurück in das Verzeichnis des aufrufenden Programmes. |
Re: Problem mit Shellexecute
Hi,
so tut dat ...
Delphi-Quellcode:
Warum geht dein Versuch nicht ...
procedure Test( const RunProg : string );
var Pfad : string; Prog : string; begin Prog := RunProg; Pfad := ExtractFilePath( Prog ); ShellExecute( 0, 'open', PAnsiChar( Prog ), nil, PAnsiChar( Pfad ), SW_SHOWNORMAL ); end;
Delphi-Quellcode:
soll einen Zeiger (Pointer) auf einen Speicherbereich bringen, wo sich ein nullterminierte Zeichenkette befindet.
PChar(ExtractFilePath(Application.ExeName))
Delphi-Quellcode:
ist aber nun mal sehr kurzlebig, weil ja nicht gesagt wird, dass das auch gespeichert werden soll.
ExtractFilePath(Application.ExeName)
Also alles zusammentragen und in einer Variablen speichern und dann mit PChar (bzw. die korrekte Deklaration ist ein PAnsiChar) den Zeiger auf die Variable holen und übergeben. (bitte jetzt mal einen Pointer-Meister an die Front, bevor ich hier Müll erzähle, aber ich stelle mir das genau so vor) cu Oliver |
Re: Problem mit Shellexecute
vielen Dank für die zahlreichen Antworten,
leider funktioniert das Alles nicht. Ich habe wirkliche die verschiedensten Kombinationen ausprobiert. Selbst die Pfade und Dateinamen habe ich direkt in Shellexecute angegeben - also ohne irgendwelche Pointer oder andere Methoden die sich negativ auswirken könnten. Es ist einfach nicht zu wollen. Was mir allerdings aufgefallen ist ist dass das unter Win XP überhaupt kein Problem darstellt. Nur auf Win 2003 krieg ich es einfach nicht zum laufen. |
Re: Problem mit Shellexecute
Hi,
Delphi-Quellcode:
Getestet (vor 1 Minute) auf Vista x64, Win2003, läuft
unit Unit3;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm3 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form3: TForm3; implementation uses ShellApi; {$R *.dfm} procedure Test( const RunProg : string ); var Pfad : string; Prog : string; begin Prog := RunProg; Pfad := ExtractFilePath( Prog ); ShellExecute( 0, 'open', PAnsiChar( Prog ), nil, PAnsiChar( Pfad ), SW_SHOWNORMAL ); end; procedure TForm3.Button1Click(Sender: TObject); begin Test( Application.ExeName ); end; end. cu Oliver |
Re: Problem mit Shellexecute
nein leider startet auch weiterhin nur das setup,
es ist zum haare raufen! evtl liegt es ja an der einfachen dateifrage die ich unter xp benutze und der rechte verwaltung die win 2003 benutzt? allerdigns hab ich auch schon probiert die anwendung samt ordner für alle zugänglich zu machen =/ |
Re: Problem mit Shellexecute
Hi,
ich glaube isch weiß jetzt ...
Delphi-Quellcode:
Also so ( Button1 und Label1 auf das Form )
ShellExecute(
hWnd, // Windows-Handle Operation, FileName, Parameters, // hier übergibst du nil, also nix, muss hier vielleicht der Pfad übergeben werden? Directory, ShowCmd )
Delphi-Quellcode:
Manchmal muss man mit mir sprechen wie mit einem Hund, nur etwas langsamer :mrgreen:
unit Unit3;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm3 = class(TForm) Button1: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form3: TForm3; implementation uses ShellApi; {$R *.dfm} procedure Test( const RunProg : string ); var Pfad : string; Prog : string; begin Prog := RunProg; Pfad := ExtractFilePath( Prog ); ShellExecute( 0, 'open', PAnsiChar( Prog ), PAnsiChar( Pfad ), PAnsiChar( Pfad ), SW_SHOWNORMAL ); end; procedure TForm3.Button1Click(Sender: TObject); begin Test( Application.ExeName ); end; procedure TForm3.FormCreate(Sender: TObject); begin if ParamCount > 0 then Label1.Caption := ParamStr( 1 ); end; end. cu Oliver |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:16 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