sql-server – Inno Setup – 尝试安装NetFx3功能时“尝试加载格式不正确的程序”

我正在使用Inno Setup编写安装脚本,如果尚未安装SQL Server 2008 R2 Express,我需要安装它.

因为它需要安装.NET Framework 3.5 SP1,我已经下载并尝试从我的脚本安装netfx35.exe.但我不能直接执行安装,我必须通过“添加角色和功能向导”来完成.为了自动执行,我使用Dism,但是当我尝试启用NetFx3功能时出错.以下是有关我执行的操作的一些信息:

(该脚本是在Windows 7 Professional SP1 64位下开发的,它是在我以管理员身份登录的Windows Server 2008 R2 Standard 64位下运行的.)

第1步:确保命令行正确.

在Windows Server计算机上,我在cmd提示符和批处理文件中都运行了以下命令行,以确保我尝试执行的命令是正确的并且执行正确的工作.

Dism /online /enable-feature /featurename:NetFx3 /NoRestart

结果是我的预期,.Net Framework 3.5已启用.

第2步:尝试从Inno Setup脚本执行相同的命令行.

Exec('Dism', ' /online /enable-feature /featurename:NetFx3 /NoRestart', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
MsgBox(SysErrorMessage(ResultCode), true, MB_OK);

当我编译并执行我的脚本时,我收到一条错误“试图加载一个格式不正确的程序”.经过一些研究,我发现了类似的情况,因为该架构(尝试在64位模式下运行32位应用程序).因此,我尝试使用以下命令:

Dism.exe /online /enable-feature /featurename:NetFx3 /NoRestart
C:\Windows\System32\Dism.exe /online /enable-feature /featurename:NetFx3 /NoRestart
C:\Windows\SysWOW64\Dism.exe /online /enable-feature /featurename:NetFx3 /NoRestart

即使我从Inno Setup运行批处理,它也不起作用.我怀疑它来自管理员权限,但在Inno Setup函数中,IsAdminLoggedOn返回True.

有谁能够帮我 ?我不知道该怎么办了.

先感谢您.

最佳答案 我找到了解决方案.

DISM的问题在于它的32位版本是由Inno Setup调用的,并且因为操作系统是64位而引发了错误.

我刚刚将以下参数添加到安装组:

ArchitecturesInstallIn64BitMode=x64

我不知道它是否有副作用,但在我的情况下它有效.

点赞