2013-05-13 94 views
1

我的安装程序需要重新分配.NET框架,但我不想有一个setup.exe包装,所以我写了一个自定义操作来启动.NET的Web安装程序最终用户机器尚未拥有它。这适用于.NET 4.0和.NET 3.5,但对于.NET 4.5,.NET安装程序报告“等待另一个安装完成”并失败 - 如果我的自定义操作位于Exec序列中,此错误消息将正确我特别将它放在UI序列的早期,以允许嵌套安装。InstallShield与.NET 4.5嵌套安装

完全相同的配置的InstallShield /代码工作正常使用.NET 3.5和.NET 4.0,但失败,.NET 4.5,我使用的是微软的标准Web安装程序: http://www.microsoft.com/en-ca/download/details.aspx?id=30653

有谁知道任何解决方案还是解决这个问题?

下面是我的自定义操作的代码:我很惊讶,.NET 4.0和3.5也不像这个工作

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

解决的办法是先提取.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记录”

这充分解决了我原版的 题。

+1

自定义操作那叫一个msi是janky ...你想链msis – thekbb 2013-12-14 04:12:54

+0

如何链msis? – godblessfq 2015-11-29 16:45:29

+0

如前所述,MSIs不应该(不容易)嵌套。但由于某些原因,许多人从用户序列中启动了prereq MSI,而且这种方式通常很好。如果这是“嵌套”,取决于观点。主要的缺点是你无法静静地运行这个设置 - 你依赖于确切的对话模式。如果这是可以接受的,我看不出有什么理由要告诉所有人,这很糟糕 - 这很容易,而且很有效。只有像.NET 4.5这样的一些设置不仅测试常见的MSI互斥量,还有更多。所以这里需要解压缩这个解决方法。 – Philm 2016-02-15 10:39:20

2

;启动一个可能在MSI安装程序中使用MSI作为自定义操作的安装程序是一个坏主意。

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

+0

它可以在少数情况下工作,例如从提升的命令会话运行的完全交互式安装,并且自定义操作在UI序列中计划。这打破了所有最佳实践,所以显然不是这样。您提到的套件安装程序或安装程序必备软件是正确的方法。 – 2013-05-15 14:19:25

+0

我一直在使用这种自定义操作方法来部署我的应用程序Prereqs一段时间,并且从来没有任何问题由最终用户报告,那么为什么这是“打破所有最佳实践”呢? – 2013-05-16 15:12:45

+0

此链接描述Microsoft最佳做法,并特别提到此:http://msdn.microsoft.com/en-us/library/windows/desktop/bb204770(v=vs.85).aspx#concurrent_installs – NGaida 2013-05-16 16:37:50

相关问题