我的安装程序需要重新分发.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;
答案 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”
这完全解决了我原来的问题。