AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Shellexecute

Ein Thema von endeffects · begonnen am 28. Okt 2008 · letzter Beitrag vom 28. Okt 2008
Antwort Antwort
Seite 1 von 2  1 2      
endeffects

Registriert seit: 27. Jun 2004
450 Beiträge
 
#1

Problem mit Shellexecute

  Alt 28. Okt 2008, 17:07
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:
ShellExecute(0, 'open', PChar('fremde.exe'), nil, nil, SW_SHOWNORMAL) und das klappt dann nicht, obwohl es das eigentlich sollte
ShellExecute(0, 'open', PChar(ExtractFilePath(Application.ExeName) + 'Unterordner\fremde.exe'), nil, PChar(ExtractFilePath(Application.ExeName) + 'Unterordner\'), SW_SHOWNORMAL) Jemand vielleicht eine Idee wie man das lösen kann?
Ich hab schon fast jede erdenkliche Kombination ausprobiert. =(
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.544 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Problem mit Shellexecute

  Alt 28. Okt 2008, 17:31
Was ist denn ein "Überordner"? Meinst Du das übergeordnete Verzeichnis Deines Programmpfads?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
endeffects

Registriert seit: 27. Jun 2004
450 Beiträge
 
#3

Re: Problem mit Shellexecute

  Alt 28. Okt 2008, 17:43
oh also in dem fall ein übergeordnetes verzeichnis
der anwendung die ich starten will
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.544 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Problem mit Shellexecute

  Alt 28. Okt 2008, 17:45
Probier mal, ob das geht:ShellExecute(0, 'open', PChar(ExtractFilePath(Application.ExeName) + '..\Unterordner\fremde.exe'), nil, PChar(ExtractFilePath(Application.ExeName) + '..\Unterordner\'), SW_SHOWNORMAL);
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

Re: Problem mit Shellexecute

  Alt 28. Okt 2008, 17:50
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

Re: Problem mit Shellexecute

  Alt 28. Okt 2008, 19:28
Hi,

so tut dat ...
Delphi-Quellcode:
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;
Warum geht dein Versuch nicht ...
PChar(ExtractFilePath(Application.ExeName)) soll einen Zeiger (Pointer) auf einen Speicherbereich bringen, wo sich ein nullterminierte Zeichenkette befindet.
ExtractFilePath(Application.ExeName) ist aber nun mal sehr kurzlebig, weil ja nicht gesagt wird, dass das auch gespeichert werden soll.
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
endeffects

Registriert seit: 27. Jun 2004
450 Beiträge
 
#7

Re: Problem mit Shellexecute

  Alt 28. Okt 2008, 19:40
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

Re: Problem mit Shellexecute

  Alt 28. Okt 2008, 19:47
Hi,
Delphi-Quellcode:
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.
Getestet (vor 1 Minute) auf Vista x64, Win2003, läuft

cu

Oliver
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
endeffects

Registriert seit: 27. Jun 2004
450 Beiträge
 
#9

Re: Problem mit Shellexecute

  Alt 28. Okt 2008, 19:58
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 =/
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

Re: Problem mit Shellexecute

  Alt 28. Okt 2008, 20:13
Hi,

ich glaube isch weiß jetzt ...

Delphi-Quellcode:
ShellExecute(
  hWnd, // Windows-Handle
  Operation,
  FileName,
  Parameters, // hier übergibst du nil, also nix, muss hier vielleicht der Pfad übergeben werden?
  Directory,
  ShowCmd )
Also so ( Button1 und Label1 auf das Form )
Delphi-Quellcode:
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.
Manchmal muss man mit mir sprechen wie mit einem Hund, nur etwas langsamer

cu

Oliver
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:11 Uhr.
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