Inno Setup - 使用cmd.exe执行命令而不启动批处理文件

时间:2017-02-02 09:50:47

标签: cmd inno-setup

我尝试使用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]部分,因为我在安装步骤之前需要这些信息...

2 个答案:

答案 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)

使用GetUserNameStringGetEnv功能:

GetUserNameString()
GetEnv('USERDOMAIN')

回答你的问题:你错过了/C开关。您应该使用{cmd} constant而不是硬编码cmd.exe

Exec(
  ExpandConstant('{cmd}'), '/C ' + CommandLine,
  '', SW_HIDE, ewWaitUntilTerminated, ResultCode);

虽然你的方法太过分了。