我正在拼命尝试使用Inno Installer安装SQL Server Express 2017。在我的安装程序中,我包含了解压缩的安装程这意味着我已经执行了常见的SQLEXPR_x64_ENU.exe,以避免在我的安装程序运行时出现“extract-temp-folder”提示。
我在cmd上执行以下命令:
{somePath}\SQLEXPR_x64_ENU\setup.exe /ACTION=Install /Q /SKIPRULES=RebootRequiredCheck /SUPPRESSPRIVACYSTATEMENTNOTICE=1 /IAcceptSQLServerLicenseTerms=1 /SECURITYMODE=SQL /SAPWD=secretPW /ConfigurationFile=ConfigurationFileExpr.ini
安装成功。
但是当我在我的InnoInstaller-File中做同样的事情时:
...
[Files]
Source: "SQLEXPR_x64_ENU\*"; DestDir: "{tmp}\SQLEXPR_x64_ENU"; Check: not SQLExpress_Check; Flags: recursesubdirs;
[Run]
Filename: "{tmp}\SQLEXPR_x64_ENU\setup.exe"; Description: "Installing SQL Server Express 2017..."; StatusMsg: "Installing SQL Server Express 2017..."; \
Parameters: "/ACTION=Install /Q /SKIPRULES=RebootRequiredCheck /SUPPRESSPRIVACYSTATEMENTNOTICE=1 /IAcceptSQLServerLicenseTerms=1 /SECURITYMODE=SQL /SAPWD=secretPW /ConfigurationFile=ConfigurationFileExpr.ini"; Check: not SQLExpress_Check; Flags: runascurrentuser;
...
SQL Installer失败,出现以下错误:
Exception type: System.MissingMethodException
Message:
Method not found: 'Void Microsoft.SqlServer.Chainer.Infrastructure.RoleService.Initialize(Microsoft.SQL.Chainer.Product.RolesType)'.
HResult : 0x80131513
Data:
DisableWatson = true
Stack:
at Microsoft.SqlServer.Configuration.BootstrapExtension.InitializeRoleServiceAction.ExecuteAction(String actionId)
at Microsoft.SqlServer.Chainer.Infrastructure.Action.Execute(String actionId, TextWriter errorStream)
at Microsoft.SqlServer.Setup.Chainer.Workflow.ActionInvocation.<>c__DisplayClasse.<ExecuteActionWithRetryHelper>b__b()
at Microsoft.SqlServer.Setup.Chainer.Workflow.ActionInvocation.ExecuteActionHelper(ActionWorker workerDelegate)
这是权限错误吗?我没有线索。在cmd-shell上它可以工作,但不在InnoInstaller上。
在此先感谢您的努力,祝您度过愉快的一天。
我的解决方案由Gavin Lambert在Inno Setup Forum上提供:
如果你[从解压缩文件目录安装],你需要使用{sd}\shortname
作为DestDir
(通常与deleteafterinstall
结合) - 你不能把文件放在{tmp}
或任何类似的路径,因为文件非常深层嵌套并且db安装程序最终无法访问某些文件,因为路径太长。