So ein Mist. So geht es jetzt:
Delphi-Quellcode:
function CreateProcessAsLogon(const User, PW, Application, CmdLine: WideString; var LastError: DWORD):
LongBool;
var
si : TStartupInfoW;
pif : TProcessInformation;
begin
ZeroMemory(@si, sizeof(si));
si.cb := sizeof(si);
si.dwFlags := STARTF_USESHOWWINDOW;
si.wShowWindow := 1;
result := CreateProcessWithLogonW(PWideChar(User), nil, PWideChar(PW),
LOGON_WITH_PROFILE, nil, PWideChar(Application+' "'+CmdLine+'"'),
CREATE_DEFAULT_ERROR_MODE, nil, nil, @si, @pif);
if not result then
MessageBox(hApp, PChar(SysErrorMessage(GetLastError)), APPNAME, MB_ICONSTOP);
end;
Auch mit Parametern. Aber das ist Mist, weil dann die aufrufende Routine die Fehlerbehandlung nicht machen kann. Und so was gefällt mir nicht. Wollte ich jetzt keine Fehlermeldung haben, müsste ich im Code rumfuschen.
Hier übrigens dein feuchter Händedruck:
Delphi-Quellcode:
{************************************************************}
{ }
{ RunAsUser - Version 1.1 }
{ }
{ Copyright (c) 2005 Michael Puff }
{ }
{ When I die I want 'Hello, world' carved on my headstone. }
{ }
{************************************************************}
{*************************************************************
History:
- 2005-01-24 - 1.1
GetLastError-Bug in CreateProcessAsLogon von tommie-lie
gefunden:
[url]http://www.delphipraxis.net/post306577.html#306577[/url]
*************************************************************}