我正在尝试从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}')无济于事。
答案 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();