Inno setup InnoSetup-无法识别shell脚本
我正在尝试从inno安装程序运行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
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新闻组中的。