Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Windows 7: Andere Anwendung per ShellExecute starten => error (https://www.delphipraxis.net/178700-windows-7-andere-anwendung-per-shellexecute-starten-%3D-error.html)

Furtbichler 22. Jan 2014 07:01

Windows 7: Andere Anwendung per ShellExecute starten => error
 
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?
:stupid:

[x] Ja, ich oute mich hiermit als Volldrömel.

DeddyH 22. Jan 2014 07:11

AW: Windows 7: Andere Anwendung per ShellExecute starten => error
 
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 ;)

Union 22. Jan 2014 07:20

AW: Windows 7: Andere Anwendung per ShellExecute starten => error
 
Erhält der Benutzer eine Fehlermeldung? Stimmen die Parameter für Verzeichnis und Dateiname? Handelt es sich um ein Ansi oder Widechar-Delph?

jaenicke 22. Jan 2014 08:19

AW: Windows 7: Andere Anwendung per ShellExecute starten => error
 
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
Delphi-Quellcode:
'runas'
testen.

Aber GetLastError sollte wie schon genannt wurde natürlich am ehesten Aufschluss geben. Sprich z.B.
Delphi-Quellcode:
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.

arnof 22. Jan 2014 08:45

AW: Windows 7: Andere Anwendung per ShellExecute starten => error
 
Mit welcher Delphiversion arbeitest Du ?

cookie22 22. Jan 2014 11:27

AW: Windows 7: Andere Anwendung per ShellExecute starten => error
 
Was hat das mit der Delphi Version zu tun? ShellExecuteEx ist ein Api Call.

Union 22. Jan 2014 13:05

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

Zitat von cookie22 (Beitrag 1244864)
Was hat das mit der Delphi Version zu tun? ShellExecuteEx ist ein Api Call.

Wegen evtl. Widechar/Ansichar-Probleme.

jaenicke 22. Jan 2014 14:36

AW: Windows 7: Andere Anwendung per ShellExecute starten => error
 
Solange man nicht explizit PAnsiChar oder PWideChar oder ShellExecuteExA oder so benutzt, ist das egal, da es immer funktioniert.

himitsu 22. Jan 2014 14:54

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

Zitat von jaenicke (Beitrag 1244908)
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
Delphi-Quellcode:
Else
statt dem
Delphi-Quellcode:
If Not bOK Then
hätte nutzen können
und es vorallem nicht geschadet hätte, im Fehlerfall das GetLastError auszuwerten.

DeddyH 22. Jan 2014 15:03

AW: Windows 7: Andere Anwendung per ShellExecute starten => error
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:10 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