Einzelnen Beitrag anzeigen

Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#18

AW: Too stupid to execute and wait

  Alt 9. Aug 2011, 11:56
Funktioniert wunderbar:
Hmm, du mischst aber auch WideString und AnsiString bzw. gibst es nicht explizit an.   ShExecInfo.lpVerb := 'open'; Ich würde es so versuchen (Deine Sourcen angepasst):
Delphi-Quellcode:
uses
  ShellAPI;

procedure ExecAndWait(Filename, Params: string; AHWnd: HWND; WindowState: word = SW_SHOWNORMAL);
var
  ShExecInfo: SHELLEXECUTEINFO;
const
  SEE_MASK_NOASYNC= $100;
begin
  ZeroMemory(@ShExecInfo, SizeOf(ShExecInfo));
  ShExecInfo.Wnd := AHWnd;
  ShExecInfo.cbSize := sizeof(SHELLEXECUTEINFO);
  ShExecInfo.fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_NOASYNC;
  ShExecInfo.lpVerb := 'open';
  ShExecInfo.lpFile := PChar(Filename);
  ShExecInfo.lpParameters := PChar(Params);
  ShExecInfo.lpDirectory := PChar(ExtractFileDir(Filename));
  ShExecInfo.nShow := WindowState;
  if ShellExecuteExW(@ShExecInfo) then
  begin
    WaitForSingleObject(ShExecInfo.hProcess, INFINITE);
    CloseHandle(ShExecInfo.hProcess);
  end
  else
    RaiseLastOSError;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    ExecAndWait('C:\Windows\Notepad.exe', '', Self.Handle);
  except
    on E: Exception do
      ShowMessage(E.Message);
  end;
  ShowMessage('Fertig');
end;
Aber mit meiner setup.exe ist nach dem Splashscreen Schluss.
Warum?
Nutzt du Windows Vista / 7? Dann starte sfx.exe mal mit Adminrechten oder benenne setup.exe um in meinprogramm.exe und probier es nochmal.

Gruß, Chris
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat