AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Windows 7: Andere Anwendung per ShellExecute starten => error
Thema durchsuchen
Ansicht
Themen-Optionen

Windows 7: Andere Anwendung per ShellExecute starten => error

Ein Thema von Furtbichler · begonnen am 22. Jan 2014 · letzter Beitrag vom 22. Jan 2014
Antwort Antwort
Furtbichler
(Gast)

n/a Beiträge
 
#1

Windows 7: Andere Anwendung per ShellExecute starten => error

  Alt 22. Jan 2014, 08:01
Hallo,

Ich habe hier (nee, ganz weit weg beim Kunden) ein Problem mit einer Anwendung, das an einer Stelle eine andere Anwendung startet. Das funktioniert unter XP problemlos, aber bei Windows 7 scheint es nicht zu funktionieren. Der Aufruf geht mit dieser Funktion:
Delphi-Quellcode:
Function ShellExecute_AndWait(Operation, FileName, Parameter, Directory: String;
  Show: Word; bWait: Boolean): Longint;
Var
  bOK: Boolean;
  Info: TShellExecuteInfo;

Begin
  FillChar(Info, SizeOf(Info), Chr(0));
  Info.cbSize := SizeOf(Info);
  Info.fMask := SEE_MASK_NOCLOSEPROCESS;
  Info.lpVerb := PChar(Operation);
  Info.lpFile := PChar(FileName);
  Info.lpParameters := PChar(Parameter);
  Info.lpDirectory := PChar(Directory);
  Info.nShow := Show;
  bOK := Boolean(ShellExecuteEx(@Info));
  If bOK Then Begin
    If bWait Then Begin
      While WaitForSingleObject(Info.hProcess, 100) = WAIT_TIMEOUT Do
        Application.ProcessMessages;
      bOK := GetExitCodeProcess(Info.hProcess, DWORD(Result));
    End
    Else
      Result := 0;
  End;
  If Not bOK Then Result := -1;
End;
Problem an der Sache: Ich komme an den Rechner nicht direkt ran, kann also nur per 'Stille Post' Anweisungen geben.


Meine Frage (hier bin ich Laie):
1. Wäre es denkbar, das der aktuelle Benutzer keine Rechte hat, die Fremdanwendung zu starten? Gibt es hier Unterschiede zwischen XP und Win 7?
2. Wenn der angemeldete Nutzer die Anwendung per Doppelklick starten kann, geht das dann auch mit der o.g. Funktion? D.h. reicht es, die Rechte so einzurichten, das Doppelklick funktioniert?
3. Falls 1=JA und 2=JA dann: Wie stellt man das ein?
4. Würde man (1) in einem Windows-Ereignis-Log sehen?


[x] Ja, ich oute mich hiermit als Volldrömel.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

AW: Windows 7: Andere Anwendung per ShellExecute starten => error

  Alt 22. Jan 2014, 08:11
Zunächst würde ich mal untersuchen, was genau denn eigentlich schiefläuft. Aus der Hilfe zu ShellExecuteEx:
Zitat:
Return value

Type: BOOL

Returns TRUE if successful; otherwise, FALSE. Call GetLastError for extended error information.
Das wäre schon einmal aussagefähiger als ein fest vorgegebenes -1
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
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: Windows 7: Andere Anwendung per ShellExecute starten => error

  Alt 22. Jan 2014, 08:20
Erhält der Benutzer eine Fehlermeldung? Stimmen die Parameter für Verzeichnis und Dateiname? Handelt es sich um ein Ansi oder Widechar-Delph?
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Windows 7: Andere Anwendung per ShellExecute starten => error

  Alt 22. Jan 2014, 09:19
Was benutzt du denn als Verb bzw. Operation? Manche geben dort einen Leerstring an, was zwar meistens funktioniert, aber eben nicht immer.
Und ob es an Rechten liegt, kannst du mit dem Verb 'runas' testen.

Aber GetLastError sollte wie schon genannt wurde natürlich am ehesten Aufschluss geben. Sprich z.B. SysErrorMessage(GetLastError) .

Sonst wäre z.B. das Verzeichnis ein Kandidat. Benutzt du sowohl für Arbeitsverzeichnis als auch für die Anwendung selbst einen absoluten Pfad? Denn das Arbeitsverzeichnis mag sich ja ändern, wie dir denke ich klar ist.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
arnof

Registriert seit: 25. Apr 2013
1.254 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: Windows 7: Andere Anwendung per ShellExecute starten => error

  Alt 22. Jan 2014, 09:45
Mit welcher Delphiversion arbeitest Du ?
  Mit Zitat antworten Zitat
Benutzerbild von cookie22
cookie22

Registriert seit: 28. Jun 2006
Ort: Düsseldorf
936 Beiträge
 
Delphi XE2 Professional
 
#6

AW: Windows 7: Andere Anwendung per ShellExecute starten => error

  Alt 22. Jan 2014, 12:27
Was hat das mit der Delphi Version zu tun? ShellExecuteEx ist ein Api Call.
Gruß
Cookie
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#7

AW: Windows 7: Andere Anwendung per ShellExecute starten => error

  Alt 22. Jan 2014, 14:05
Was hat das mit der Delphi Version zu tun? ShellExecuteEx ist ein Api Call.
Wegen evtl. Widechar/Ansichar-Probleme.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Windows 7: Andere Anwendung per ShellExecute starten => error

  Alt 22. Jan 2014, 15:36
Solange man nicht explizit PAnsiChar oder PWideChar oder ShellExecuteExA oder so benutzt, ist das egal, da es immer funktioniert.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

AW: Windows 7: Andere Anwendung per ShellExecute starten => error

  Alt 22. Jan 2014, 15:54
Solange man nicht explizit PAnsiChar oder PWideChar oder ShellExecuteExA oder so benutzt, ist das egal, da es immer funktioniert.
Aber wenn man es angibt, oder auch nicht, dann muß es dennoch übereinstimmen.
Also PAnsiChar zur ANSI-API, PWideChar zur Unicode-API oder PChar zur dynamischen API.

Und da oben passen die dynamischen String, PChar und API (TShellExecuteInfo, ShellExecuteEx) zusammen.


Sonst endet es, wie in diesem Fall
http://www.delphipraxis.net/32578-ve...ml#post1244905


Auch wenn man da oben hätte ein Else statt dem If Not bOK Then hätte nutzen können
und es vorallem nicht geschadet hätte, im Fehlerfall das GetLastError auszuwerten.
$2B or not $2B

Geändert von himitsu (22. Jan 2014 um 16:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#10

AW: Windows 7: Andere Anwendung per ShellExecute starten => error

  Alt 22. Jan 2014, 16:03
Bei CreateProcess macht es einen Unterschied, ob man die Ansi- oder Unicode-Variante aufruft.
Zitat:
lpCommandLine [in, out, optional]

The command line to be executed. The maximum length of this string is 32,768 characters, including the Unicode terminating null character. If lpApplicationName is NULL, the module name portion of lpCommandLine is limited to MAX_PATH characters.

The Unicode version of this function, CreateProcessW, can modify the contents of this string. Therefore, this parameter cannot be a pointer to read-only memory (such as a const variable or a literal string). If this parameter is a constant string, the function may cause an access violation.
Bei ShellExecuteEx habe ich zumindest im MSDN keinen derartigen Hinweis entdecken können.
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
Antwort Antwort


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 09:17 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