InstallShield与.NET 4.5嵌套安装

时间:2013-05-13 20:48:23

标签: .net .net-4.5 installshield installscript

我的安装程序需要重新分发.NET框架,但我不想要一个setup.exe包装器,所以我已经编写了一个自定义操作来启动.NET的Web安装程序,如果结束 - 用户机器还没有它。这适用于.NET 4.0和.NET 3.5,但对于.NET 4.5,.NET安装程序报告"等待另一个安装完成"并且失败 - 如果我的自定义操作在Exec序列中,则此错误消息将是正确的,但我特别在UI序列中将其放置在允许嵌套安装的位置。

完全相同的InstallShield配置/代码适用于.NET 3.5和.NET 4.0,但在.NET 4.5中失败,我使用Microsoft的标准Web安装程序: http://www.microsoft.com/en-ca/download/details.aspx?id=30653

是否有人知道此问题的任何解决方案或解决方法?

这是我的自定义操作的代码:

if ( hasDotNET45 = FALSE ) then
    MessageBox( "Missing .NET 4.5 framework!", INFORMATION );
    LAAW_SHELLEXECUTEVERB = "runas";
    LaunchApplication( szSupportDir^"\\dotNetFx45_Full_setup.exe", "", "", SW_SHOWNORMAL, 100000, LAAW_OPTION_USE_SHELLEXECUTE | LAAW_OPTION_WAIT_INCL_CHILD );
    Delay( 333 );
endif;

2 个答案:

答案 0 :(得分:2)

我很惊讶.Net 4和3.5甚至可以像这样工作;启动可能在MSI安装程序中使用MSI作为自定义操作的安装程序是一个坏主意。

如果您想确保.Net4.5(或任何其他软件)存在,您需要在启动安装程序ala Setup / Feature Prerequisites in Installshield之前将其链接起来,或使用LaunchCondition表来阻止安装程序如果环境不符合要求,则继续。

答案 1 :(得分:2)

解决方案是首先使用以下命令提取.NET 4.5安装程序可执行文件的内容: dotnetfx45_full_x86_x64.exe / x

然后我可以在我的UI序列中使用自定义操作来调用.NET安装程序的.MSI版本(没有它的setup.exe包装器!)

msiexec.exe / i netfx_Full_x64.msi EXTUI = 1 / l * v“Install.log”

这完全解决了我原来的问题。