InnoSetup - 无法识别shell脚本

时间:2014-02-11 17:42:25

标签: inno-setup

我正在尝试从inno安装程序运行shell脚本,但它失败了。这是我的代码:

procedure CurStepChanged(CurStep: TSetupStep);
var
  ErrorCode: Integer;
  cmdString: String;  
begin
if (CurStep=ssInstall)
then
   cmdString := 'net stop wuauserv'; 
   Exec(ExpandConstant('{cmd}'), '/C ' + cmdString, '', SW_SHOW, ewWaitUntilTerminated, ErrorCode);
if (CurStep=ssPostInstall)
then
cmdString := 'net start wuauserv'; 
Exec(ExpandConstant('{cmd}'), '/C ' + cmdString, '', SW_SHOW, ewWaitUntilTerminated, ErrorCode);
if Exec(ExpandConstant('{cmd}'), '/c {tmp}/wsus.bat', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode) then
if (CurStep=ssDone)
then
cmdString := 'wuauclt /resetauthorization /detectnow & pause'; 
Exec(ExpandConstant('{cmd}'), '/C ' + cmdString, '', SW_SHOW, ewWaitUntilIdle, ErrorCode);
end;

前两个似乎运行正常,最后一个命令失败,错误:

'wuauclt' is not recognized as an internal or external command,
operable program or batch file.
Press any key to continue . .

有什么建议吗?我相信它没有设置正确的工作目录,我尝试过Exec(ExpandConstant('{win}'),Exec(ExpandConstant('{sys}')和Exec(ExpandConstant('{cmd}')无济于事。

1 个答案:

答案 0 :(得分:1)

使用您在新闻组中发布的信息,这被追溯到32位与64位问题。 64位Windows计算机在32位系统文件夹中没有wuauclt.exe

Inno Setup(默认情况下)以32位模式运行,因此{cmd}(和{sys})映射到32位版本,然后访问“C:\ Windows \ SysWoW64 \”。

要解决此问题,您应该为“{sys} \ wuauclt.exe”使用两个[Run]条目,但是一个具有64位标志和一个相应的“IsWin64()”Check:参数。另一个应该有一个相反的“Not IsWin64()”check:parameter。

[Run]
Filename: "{sys}\wuauclt.exe"; Parameters: "/resetauthorization /detectnow"; Check: not IsWin64();
Filename: "{sys}\wuauclt.exe"; Parameters: "/resetauthorization /detectnow"; Flags: 64bit; Check: IsWin64();