Inno setup InnoSetup-无法识别shell脚本

Inno setup InnoSetup-无法识别shell脚本,inno-setup,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 ' + cmdS

我正在尝试从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}'),但都没有用。

根据您在新闻组中发布的信息,这是一个32位对64位的问题。 64位Windows计算机在32位系统文件夹中没有
wauclt.exe

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

为了解决这个问题,您应该为“{sys}\wuauclt.exe”使用两个[Run]条目,但其中一个具有64位标志和适当的“IsWin64()”Check:parameter。另一个应该具有相反的“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();

如果我是你,我会使用Windows Update代理API。这对于我想要实现的目标(或有能力实现的目标)来说有点太复杂了。上面的命令将非常适合我的目标,而不会使其过于复杂…如果我能找出它无法正确运行的原因。作为安装的一部分,它会将bat文件复制到应用程序目录,如果我在安装程序外部运行它,它可以正常工作,但可以通过[run]运行它或者使用上面的语句,它也失败了。再试一次,.bat文件被安装到应用程序目录,然后通过inno安装文件执行。但是仍然会得到相同的错误,即wuauclt无法识别,如果我直接从应用程序目录运行该文件,它工作正常。我建议的API非常易于使用,并且比其他API可靠得多您无法找到的命令行工具。请查看脚本,该脚本执行更新搜索,并在安装程序启动时返回可用的更新计数。它基于。但我在这里不是为了让您相信这种方式:-)这也是Inno setup新闻组中的。