下面的代码利用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.