Здравствуйте, okman, Вы писали:
O>Здравствуйте, Maclaud, Вы писали:
M>>M>>function RunProcessInSession(SessionID:dword; AExeName,AParamStr:string):boolean;
M>>...
M>>
O>Это ведь код на Delphi, так ?
O>Вот тут не может быть ошибки:
O>O>lpDesktop := PChar('winsta0\default');
O>
O>В том смысле, что не может ли обратный слэш восприниматься как escape-последовательность ?
O>P.S. Я в Delphi не смыслю ничего...
Нет, в делфи нет экранирования.
Вот такое создание из из сервиса, нормально создает видимый процесс, но только на консоли.
function RunProcess(AExeName,AParamStr:string):boolean;
var
StartUpInfo: TStartUpInfo;
ProcessInfo: TProcessInformation;
begin
{$IFDEF dm}_log('RunProcess start '+AExeName+' '+AParamStr,false,1);{$ENDIF}
FillChar(ProcessInfo, SizeOf(TProcessInformation), 0);
FillChar(StartUpInfo, SizeOf(TStartUpInfo), 0);
with StartUpInfo do
begin
cb := SizeOf(TStartUpInfo);
dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
wShowWindow := SW_SHOWNORMAL;
lpDesktop := PChar('winsta0\default');
end;
result := func_CreateProcessA(PChar(AExeName), PChar(AExeName+' '+AParamStr), nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);
if not WindowsError(result) then
begin
//func_WaitForInputIdle(ProcessInfo.hProcess, 60000);
func_CloseHandle(ProcessInfo.hThread);
func_CloseHandle(ProcessInfo.hProcess);
end;
{$IFDEF dm}_log('RunProcess end',false,-1);{$ENDIF}
end;