Einzelnen Beitrag anzeigen

QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
2.046 Beiträge
 
Delphi 12 Athens
 
#20

AW: Too stupid to execute and wait

  Alt 9. Aug 2011, 11:05
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
Ich nutze 2000, xp, und 7
über all das selbe Verhalten nur das es bei Windows 7 erst mit Adminrechten überhaupt in den Splashscreen kommt.

Ich testete dioe letzen paar minuten hier auf einer Windows 2000 virtuellen maschiene...
Andreas
Nobody goes there anymore. It's too crowded!
  Mit Zitat antworten Zitat