AGB  ·  Datenschutz  ·  Impressum  







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

Problem mit ShellExecute und Windows 8

Ein Thema von Codewalker · begonnen am 18. Jan 2013 · letzter Beitrag vom 19. Jan 2013
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#1

Problem mit ShellExecute und Windows 8

  Alt 18. Jan 2013, 15:51
Hallo zusammen.

Ich nutze bisher folgenden Code, um einen Prozess mit Parametern zu starten und auf die Beendigung zu warten (ich nutze vorgabebeding einige Returncodes):
Delphi-Quellcode:
function ExecuteAndWait(Filename, Params: Widestring;
                     WindowState: Word = SW_SHOWNORMAL): Integer;
var
  ShExecInfoW: SHELLEXECUTEINFOW;
  r : Cardinal;
  ExitCode: Cardinal;
  res: Boolean;
begin
  Result := -50;
  if Filename = 'then Exit;
  if not FileExists(FileName) then
  begin
    Exit(-100);
  end;

  ShExecInfoW.Wnd := GetForegroundWindow;
  ShExecInfoW.cbSize := sizeof(SHELLEXECUTEINFOW);
  ShExecInfoW.fMask := SEE_MASK_NOCLOSEPROCESS;
  ShExecInfoW.lpVerb := 'open';
  ShExecInfoW.lpFile := PWideChar(Filename);
  ShExecInfoW.lpParameters := PWideChar(Params);
  ShExecInfoW.lpDirectory := PWideChar(ExtractFileDir(Filename));
  ShExecInfoW.nShow := WindowState;
  res := ShellExecuteExW(@ShExecInfoW);

  try
    if res then
    begin
      r := WaitForSingleObject(ShExecInfoW.hProcess, INFINITE);
      if not GetExitCodeProcess(ShExecInfoW.hProcess, ExitCode)
        then Result := -1;
    end;
  finally
    CloseHandle(ShExecInfoW.hProcess);
    Result := ExitCode;
  end;
end;
Das klappte bisher sehr gut, aber unter Windows 8 friert mein Programm ein und der andere Prozess wird nicht gestartet. Wenn ich dann mein Programm über den Debugger kille, dann wird endlich (aber zu spät natürlich) der andere Prozess gestartet. Was habe ich nicht bedacht?
  Mit Zitat antworten Zitat
dunningkruger

Registriert seit: 25. Mai 2012
59 Beiträge
 
#2

AW: Problem mit ShellExecute und Windows 8

  Alt 18. Jan 2013, 16:19
Bei mir funktionieren manche Programme erst dann korrekt, wenn ich sie nicht aus der IDE oder völlig ohne laufende IDE starte. Probiers mal aus!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Problem mit ShellExecute und Windows 8

  Alt 18. Jan 2013, 16:20
BTW: Wäre
Delphi-Quellcode:
if res then
  try
nicht sinnvoller?
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 Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Problem mit ShellExecute und Windows 8

  Alt 18. Jan 2013, 16:30
BTW: Wäre
Delphi-Quellcode:
if res then
  try
nicht sinnvoller?
Ja, ich denke du hast Recht

Edit: Ändert aber am Verhalten erstmal nix.

Geändert von Codewalker (18. Jan 2013 um 16:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Problem mit ShellExecute und Windows 8

  Alt 18. Jan 2013, 16:46
Wo genau bleibt das Programm denn stehen? Der Prozess scheint ja noch gestartet zu werden.
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 Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#6

AW: Problem mit ShellExecute und Windows 8

  Alt 18. Jan 2013, 16:59
Er bleibt beim WaitForSingleObject hängen, aber nicht immer. Ich werde mich da mal in Ruhe durchsteppen ...

Edit: Scheint wohl mit Berechtigung / UAC zusammenzuhängen. Weiß jemand, wie ich mit ShellExecute & UAC das sauber umsetzen kann, ein anderes Programm als Admin zu starten und auf dessen Beendigung zu warten?

Geändert von Codewalker (18. Jan 2013 um 17:24 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Problem mit ShellExecute und Windows 8

  Alt 18. Jan 2013, 17:29
Hilft Dir MSDN-Library durchsuchenCreateProcessWithLogonW weiter?
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
dunningkruger

Registriert seit: 25. Mai 2012
59 Beiträge
 
#8

AW: Problem mit ShellExecute und Windows 8

  Alt 18. Jan 2013, 17:50
Bei mir funktionieren manche Programme erst dann korrekt, wenn ich sie nicht aus der IDE oder völlig ohne laufende IDE starte. Probiers mal aus!
Hast Du aber gelesen, oder ?
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#9

AW: Problem mit ShellExecute und Windows 8

  Alt 18. Jan 2013, 18:05
Bei mir funktionieren manche Programme erst dann korrekt, wenn ich sie nicht aus der IDE oder völlig ohne laufende IDE starte. Probiers mal aus!
Hast Du aber gelesen, oder ?
Ja, ist mir beim Edit durchgegangen. Hat nichts geändert (wäre auch noch ärgerlicher gewesen)
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai
Online

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#10

AW: Problem mit ShellExecute und Windows 8

  Alt 18. Jan 2013, 19:17
Weiß jemand, wie ich mit ShellExecute & UAC das sauber umsetzen kann, ein anderes Programm als Admin zu starten und auf dessen Beendigung zu warten?
Benutze als Verb entweder 'runas' oder 'runasuser'. Ersteres sorgt auf Windows bis einschl. XP für den Dialog 'Ausführen als anderer Nutzer', ab Vista aber für einen UAC-Dialog, letzteres sorgt bei Windows ab Vista für 'Ausführen als anderer Nutzer' (weiß nicht mehr, wie XP darauf reagiert).

Ergänzung:
Hab ich ja völlig vergessen, dass ich selber Probleme hatte, auf das Ende eines solchen 'elevated' Prozesses zu warten, wie ich in diesem Thema ausführte... Es kann also sein, dass ShellExecuteEx auch bei aktiver UAC nicht wartet.

MfG Dalai

Geändert von Dalai (18. Jan 2013 um 19:27 Uhr)
  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 16:13 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