Когда-то мне это удавалось (ещё во времена WinXP), но сейчас - что-то не срастается.
То-ли лыжи не едут, то-ли я... косорукий.
Мой не работающий код:
- Код: Выделить всё
procedure RestartMyself(param: Utf8String);
var
ExeName, par: Utf16String;
SI: TStartupInfoW;
PI: TProcessInformation;
begin
FillChar(SI, SizeOf(SI), 0);
FillChar(PI, SizeOf(PI), 0);
SI.cb:=SizeOf(SI);
SI.wShowWindow:= 1;
ExeName:= FileNameToUtf16(GetExeFileName(@RestartMyself)) + #0;
par:= Utf8Decode(param) + #0;
//***TODO WHY DOESNT THIS WORK :(((((
CreateProcessW(PUcs2Char(ExeName), PUcs2Char(par)
, Nil, Nil, false, $20, Nil, Nil, @SI, @PI);
//**** STILL DOESNT *** F FF Fff*** WORK
WaitForInputIdle(PI.hProcess, 10000); // because halting without waiting
// for it to really start causes it to not start at all
halt(0);
end;
Пытался дебажить, вставляя MessageBoxW - в переменных правильные значения D:\chentrah\chentrah.exe и --restart
И тишинаааа...