Следующий код использует CreateProcess
для запуска команд с переменными окружения. Здесь он пытается запустить notepad %APPDATA%\test.txt
.
Если я запущу notepad %APPDATA%\test.txt
непосредственно в Windows' CMD
, %APPDATA% будет расширен. Однако переменная среды не может быть расширена при выполнении CreateProcess
. Не могли бы вы помочь прокомментировать причину и обходной путь? Любой комментарий будет оценен!
program TestConsole2;
{$APPTYPE CONSOLE}
uses
Windows, SysUtils;
var
I: Integer;
ProgramName: String;
StartInfo : TStartupInfo;
ProcInfo : TProcessInformation;
CreateOK : Boolean;
begin
try
FillChar(StartInfo, SizeOf(StartInfo), #0);
FillChar(ProcInfo, SizeOf(ProcInfo), #0);
StartInfo.cb := SizeOf(StartInfo);
ProgramName := 'NOTEPAD %APPDATA%\test.txt';
CreateOK := CreateProcess(
nil, PChar(ProgramName), nil, nil, True, 0, nil, nil, StartInfo, ProcInfo);
if CreateOK then WaitForSingleObject(ProcInfo.hProcess, INFINITE);
Readln(ProgramName);
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.