我尝试使用cmd.exe从%userdomain%和%username%参数获取Userdomain和Username,并将其放在文本文件中以便能够获取数据。
当我手动启动命令窗口并输入时,它运行良好: echo%userdomain%\%username%> " C:\用户\ MyUserName输入\应用程序数据\本地\ TEMP \是-B7P3P.tmp \ domainstring_results.txt"
如果将其放入批处理文件并启动.bat
,它也可以正常工作但是如果我对Exec函数执行相同操作,它只会启动cmd.exe而不会执行任何操作:
CommandLine := 'echo %userdomain%\%username% > "' + ExpandConstant('{tmp}') + '\domainstring_results.txt"';
Exec('cmd.exe', CommandLine, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
我不想使用批处理文件,因为我想使用安装程序的临时文件夹,因此我无法在安装程序编译之前创建批处理。 也不能在[Run]部分,因为我在安装步骤之前需要这些信息...
答案 0 :(得分:1)
只需您可以获取数据ExpandConstant('{%WindowsContantNameHere}')
这应该允许您为您的目的使用必要的数据。
[Code]
function InitializeSetup(): Boolean;
begin
MsgBox('User Name is: ' + ExpandConstant('{%Username}') + #13#10 +
'User Domain is: ' + ExpandConstant('{%Userdomain}'), mbInformation, MB_OK);
end;
答案 1 :(得分:0)
使用GetUserNameString
和GetEnv
功能:
GetUserNameString()
GetEnv('USERDOMAIN')
回答你的问题:你错过了/C
开关。您应该使用{cmd}
constant而不是硬编码cmd.exe
。
Exec(
ExpandConstant('{cmd}'), '/C ' + CommandLine,
'', SW_HIDE, ewWaitUntilTerminated, ResultCode);
虽然你的方法太过分了。