我们的安装程序会生成一个引导程序(setup.exe)和一个MSI文件 - 这是一种很常见的情况。
其中一台生产机器在安装过程中报告了一个奇怪的问题:
如果用户启动引导程序(setup.exe),则会报告未安装.NET 3.5 。管理员组下的帐户会发生这种情况。无论是否以管理员身份启动它,都是相同的行为。
无论是否以管理员身份运行,application.msi
或OurInstallLauncher.exe
(请参阅下面的说明)都会直接启动,应用程序安装正常。
我们检查过计算机上安装了.NET(64位和32位“版本”= C:\Windows\Microsoft.NET\Framework64
和C:\Windows\Microsoft.NET\Framework
下都有一个名为v3.5
的文件夹。
这种情况发生在64位Windows 7上。我无法在我的开发64位Windows 7上重现它。在Windows XP和Vista上,它在很长一段时间内都没有任何问题。
我们的构建脚本的一部分,它声明了GenerateBootStrapper任务(没什么特别的):
<ItemGroup>
<BootstrapperFile Include="Microsoft.Windows.Installer.3.1">
<ProductName>Microsoft Windows Installer 3.1</ProductName>
</BootstrapperFile>
<BootstrapperFile Include="Microsoft.Net.Framework.3.5">
<ProductName>Microsoft .NET Framework 3.5</ProductName>
</BootstrapperFile>
</ItemGroup>
<GenerateBootstrapper
ApplicationFile=".\Files\OurInstallLauncher.exe"
ApplicationName="App name"
Culture="en"
ComponentsLocation ="HomeSite"
CopyComponents="True"
Validate="True"
BootstrapperItems="@(BootstrapperFile)"
OutputPath="$(OutSubDir)"
Path="$(SdkBootstrapperPath)" />
注意:OurInstallLauncher.exe
是语言选择器,它根据用户选择将变换应用于msi。这与问题无关,因为安装程序永远不会启动这个exe!
编辑:显示启动setup.exe后立即缺少.NET 3.5并建议安装.NET 3.5。当用户同意安装时,.NET 3.5安装程序说已经安装了.NET 3.5并且MSI安装程序继续运行。如果他们选择不安装.NET 3.5,则安装结束。
之前有没有人见过这种行为?
答案 0 :(得分:3)
这似乎是Bootstrapper或Windows 7中的错误。
解决方案:
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages\DotNetFX35\en\package.xml
必须在构建计算机上进行调整,因为默认的德语Windows 7安装没有此密钥存在:
<RegistryCheck Property="DotNet35InstallSuccess"
Key="HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5\1033" Value="Install" />
因此,安装程序报告说目标计算机上没有安装.NET 3.5(德语版Windows 7)。
为了让设置正确检测已安装的.NET,
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages\DotNetFX35\en\package.xml
文件必须调整如下:
\ 1033:
<RegistryCheck Property="DotNet35InstallSuccess"
Key="HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5" Value="Install" />
答案 1 :(得分:0)
MSI安装没有问题这一事实并不令人惊讶,因为它只是安装.NET 3.5的引导程序。 MSI包不需要.NET才能安装(除非您使用.NET程序集中实现的自定义操作,或在GAC中注册.NET程序集)。
在出现此问题的计算机上卸载并重新安装.NET。它很可能只是一个以某种方式损坏的.NET安装。