Delphi-PRAXiS
Seite 5 von 5   « Erste     345   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Problem ShellExecute / CreateProcess + Wait mit Vista UAC (https://www.delphipraxis.net/92114-problem-shellexecute-createprocess-wait-mit-vista-uac.html)

Shyran 9. Sep 2011 08:49

AW: Problem ShellExecute / CreateProcess + Wait mit Vista UAC
 
Soooo.

Bei himitsu's Quellcode aus beitrag #12 findet er den Bezeichner "Win32IsUnicode" nicht, in Zeile 12:

Delphi-Quellcode:
...
{$IFDEF UNICODE}
  if Win32IsUnicode then
  begin
blabla
Daran scheitert's zumindest schonmal.

DeddyH 9. Sep 2011 09:04

AW: Problem ShellExecute / CreateProcess + Wait mit Vista UAC
 
http://www.delphipraxis.net/669318-post4.html
Ganz unten

Shyran 9. Sep 2011 09:19

AW: Problem ShellExecute / CreateProcess + Wait mit Vista UAC
 
Ah okay, also eine globale Variable, die i-wie abfragt, ob mein System auf NT basiert, ja?

Okay, ich könnte das für meinen Fall nun "drumherum" coden, indem ich vorher ein

Delphi-Quellcode:
var Win32IsUnicode : Boolean;

...

Win32IsUnicode:=True;
drauf loslasse. Aber das ist ja nicht direkt der Sinn ...

Ich habe auch versucht, die beiden Links mal zu nutzen, die in Deinem verlinkten Beitrag direkt unter dem Hinweis erwähnt sind, leider führten die ins Leere. Ich schaut mir die URL an und wusste dann, wonach ich suchen musste (ShellExec usw.), aber da wurde ich nicht schlau draus, wie ich die Win32IsUnicode Variable dynamisch, abhängig vom eingesetzten OS mit Leben fülle.

Wald ... Bäume ... *hilflos guck* :-)

jaenicke 9. Sep 2011 09:23

AW: Problem ShellExecute / CreateProcess + Wait mit Vista UAC
 
Die Abfrage kann man sich sparen, da du mit XE ohnehin nicht mehr für Win9x kompilieren kann. Insofern kannst du davon ausgehen, dass du Windows 2000 oder höher hast und einfach die Unicoderoutinen verwenden. ;-)

DeddyH 9. Sep 2011 09:23

AW: Problem ShellExecute / CreateProcess + Wait mit Vista UAC
 
Versuch es doch z.B. mit
Delphi-Quellcode:
function Win32IsUnicode: Boolean;
begin
  Result := SysUtils.Win32Platform = VER_PLATFORM_WIN32_NT;
end;

Shyran 9. Sep 2011 10:22

AW: Problem ShellExecute / CreateProcess + Wait mit Vista UAC
 
Auf Jaenicke vertrauend habe ich den Code mal zusammengestaucht:

Delphi-Quellcode:
//SHELL TEST DP
function ExecAndWait(Filename, Params: String;
                     WindowState: Word = SW_SHOWNORMAL): boolean;
var
  {$IFDEF UNICODE} ShExecInfoW: SHELLEXECUTEINFOW; {$ENDIF}
  ShExecInfoA: SHELLEXECUTEINFOA;
// MSDN: ShellExecuteEx, ShellExecuteInfo
begin
  Result := false;
  if (Filename = '') or not FileExists(FileName) then
    exit;
  {$IFDEF UNICODE}
  begin
    ShExecInfoW.Wnd := GetForegroundWindow;
    ShExecInfoW.cbSize := SizeOf(SHELLEXECUTEINFOW);
    ShExecInfoW.fMask := SEE_MASK_NOCLOSEPROCESS;
    ShExecInfoW.lpVerb := 'open';
    ShExecInfoW.lpFile := PWideChar(WideString(Filename));
    ShExecInfoW.lpParameters := PWideChar(WideString(Params));
    ShExecInfoW.lpDirectory := PWideChar(WideString(ExtractFileDir(Filename)));
    ShExecInfoW.nShow := WindowState;
    Result := ShellExecuteExW(@ShExecInfoW);
    try
      if Result then WaitForSingleObject(ShExecInfoW.hProcess, INFINITE);
    finally
      CloseHandle(ShExecInfoW.hProcess);
    end;
  end
  {$ENDIF}
end;
//SHELL Aufruf ENDE DP
Im gleichen Verzeichnis wie das .exe File meines programms beifndet sich auch die Ping.exe (das mach ich später selbstverständlich noch anders, aus dem WIndows-System-verz starten usw. aber zum Testen tut's das hier).

Mein Aufruf:

Delphi-Quellcode:
ExecAndWait('Ping.EXE','192.168.212.253 >> testping.txt');


Resultat ist ein kurzes Aufploppen einer Shell und direktes Schliessen, eine Datei "testping.txt" taucht aber nicht auf oder so.

DeddyH 9. Sep 2011 10:26

AW: Problem ShellExecute / CreateProcess + Wait mit Vista UAC
 
Und so?
Delphi-Quellcode:
ExecAndWait('cmd','/c ping 192.168.212.253 >> testping.txt');
[edit] Statt /c kannst Du es auch zunächst mit /k probieren. Für die Datei solltest Du aber unbedingt einen absoluten Pfad angeben. [/edit]

Shyran 9. Sep 2011 10:57

AW: Problem ShellExecute / CreateProcess + Wait mit Vista UAC
 
Leider ebenfalls kein Ergebnis. Ich habe zur Sicherheit auch noch jedem Probieren (/c, /k, auch mal absoluten Pfad wie
Delphi-Quellcode:
ExecAndWait('Ping.EXE',' 192.168.212.253 >> d:\testping.txt');
die Festplatte nach der Datei durchsuchen lassen, um auf Nummer sicher zu gehen.

DeddyH 9. Sep 2011 11:07

AW: Problem ShellExecute / CreateProcess + Wait mit Vista UAC
 
Also
Delphi-Quellcode:
ExecAndWait('cmd','/k ping 192.168.212.253');
funktioniert hier bei mir einwandfrei (XE auf Vista 32).

jaenicke 9. Sep 2011 12:41

AW: Problem ShellExecute / CreateProcess + Wait mit Vista UAC
 
Zitat:

Zitat von Shyran (Beitrag 1122889)
Leider ebenfalls kein Ergebnis. Ich habe zur Sicherheit auch noch jedem Probieren (/c, /k, auch mal absoluten Pfad wie
Delphi-Quellcode:
ExecAndWait('Ping.EXE',' 192.168.212.253 >> d:\testping.txt');
die Festplatte nach der Datei durchsuchen lassen, um auf Nummer sicher zu gehen.

Das Umleiten in eine Datei kann nur die cmd.exe, deshalb musst du den Befehl an diese übergeben wie DeddyH geschrieben hat.

Einfacher ist es allerdings, wenn du statt dieser Umleitung einfach die Ausgabe der ping.exe selbst ausliest. Dann brauchst du auch keine temporäre Datei, bei der du wiederum erst schauen musst wo du Schreibrechte dafür hast...


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:23 Uhr.
Seite 5 von 5   « Erste     345   

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