Hallo,
ich benutze die beiden Funktionen um einen Dienst als bestimmter Benutzer zu starten. Nun habe ich das Problem, dass dabei die Console aufgemacht wird. Das will ich aber nicht. Obwohl ich
si.wShowWindow := SW_HIDE;
eingestellt habe wird das Fenster angezeigt. Weiss jemand wo der Fehler liegt?
Delphi-Quellcode:
function CreateProcessWithLogonW(
lpUsername,
lpDomain,
lpPassword:PWideChar;
dwLogonFlags:dword;
lpApplicationName: PWideChar;
lpCommandLine: PWideChar;
dwCreationFlags: DWORD;
lpEnvironment: Pointer;
lpCurrentDirectory: PWideChar;
const lpStartupInfo: tSTARTUPINFO;
var lpProcessInformation: TProcessInformation): BOOL; stdcall; external 'advapi32.dll';
function CreateProcessAsLogon(const User, PW, Application, CmdLine: WideString):
Boolean;
var
si : TStartupInfo;
pif : TProcessInformation;
begin
ZeroMemory(@si, sizeof(TStartupInfo));
si.cb := SizeOf(TStartupInfo);
si.dwFlags := STARTF_USESHOWWINDOW;
si.wShowWindow := SW_HIDE;
Result := CreateProcessWithLogonW(PWideChar(User), nil, PWideChar(PW),
LOGON_WITH_PROFILE, nil, PWideChar(Application +' '+CmdLine),
CREATE_DEFAULT_ERROR_MODE, nil, nil, si, pif);
end;
Aufgerufen wird das ganze so:
Delphi-Quellcode:
function startServiceAsUser(Name: String; sleepTime : Integer): boolean;
begin
if not CreateProcessAsLogon(userGlobal, pwdGlobal, 'cmd.exe', '/c net start '+Name) then
begin
Showmessage(Name+' '+couldNotStart);
Result := false;
exit;
end;
Sleep(sleepTime);
Result := true;
end;