[英]Launch condition prevents silent installation (Application + .Net Framework)
我已在我的Visual Studio 2013中的应用程序中添加了安装程序部署项目,以为我的应用程序生成一个安装向导,并为提供静默安装生成一个Setup.msi -File。
执行msiexec /i "<PathToSetupDirectory>\\Setup.msi" /qb!
可以正常工作。 我的应用程序已静默安装。 但是我的C#-Application依赖于.Net-Framework 4.5.1。 如果未安装,则会出现启动条件:
此设置需要.NET Framework版本VersionNumber。 请安装.NET Framework,然后再次运行此安装程序。 可以从Web获得.NET Framework。 您现在要这样做吗?
当然,我不会这样做。 这应该会自动工作。
因此,我在Setup Deployment Project (right click) => Properties => Prerequisites...
选择了框架Setup Deployment Project (right click) => Properties => Prerequisites...
,选中“从与我的应用程序相同的位置下载先决条件”,并添加了NDP451-KB2858728-x86-x64-AllOS-ENU.exe
到目录C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.1A\\Bootstrapper\\Packages\\DotNetFX451
我的希望是,如果尚未安装框架,Setup.msi不会显示启动条件的消息。 它应该只安装.Net Framework和应用程序后记,而无需任何用户交互。 但是它仍然显示出来。 按No(否)会导致退出安装。 按是导致打开浏览器并退出安装。
当然,如果需要,我可以编写bash脚本以静默方式安装.Net Framework并最终开始以静默方式安装我的应用程序。 但是我想实现这种“正确的方法” 。 我有种错过的感觉。
有任何想法吗?
MSI安装程序也不能安装.NET Framework,主要是因为MSI安装程序不能递归安装其他MSI安装程序(NET FW)。 这是在MSI文件之前必须安装许多先决条件的原因之一,VS安装程序为此使用setup.exe。
据我所知,setup.exe引导程序没有静默选项,但这是因为许多先决条件没有静默安装。 曾经有一个工具(Bootstrap清单生成器),您可以使用该工具来更改嵌入式文件,该嵌入式文件包含用于使其静默的前提条件的命令行安装:
https://msdn.microsoft.com/en-us/library/ms165429.aspx
因此这可能仍然是一种选择。
另一个选择是使用WiX引导程序工具“ Burn”创建一个捆绑包,该捆绑包将以静默方式安装框架,然后安装MSI。 它基本上是Xml驱动的依赖项和MSI文件的规范。
感谢PhilDW澄清此主题。 很高兴知道这对于msi文件是不可能的。 我已经阅读了有关WiX引导程序工具“ Burn”和Bootstrap清单生成器的信息,并得出了编写简单批处理文件的结论。 这将检测是否安装了.Net Framework 4.5.1或更高版本-如果未安装,则会自动安装。 之后,静默msi-install开始。
silent_install.cmd
:
@echo off
set forceNetFrameworkInstall=true
echo Starting silent installation of Setup.msi and its prerequisites ...
REG QUERY "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" /v Release
if %ERRORLEVEL% EQU 0 (goto CHECK) else (goto INSTALL_DOTNET)
:CHECK
for /f "tokens=2*" %%a in ('REG QUERY "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" /v Release') do set "releaseKeyHex=%%b"
set /A releaseKeyDec=%releaseKeyHex%
if %releaseKeyDec% GEQ 378675 set forceNetFrameworkInstall=false
if %forceNetFrameworkInstall% == true (
echo Prerequisite: .Net Framework 4.5.1 or later version not detected
goto INSTALL_DOTNET
) else (
echo .Net Framework 4.5.1 or later version detected
goto INSTALL_APP
)
:INSTALL_DOTNET
echo Installing .Net Framework 4.5.1 ...
%~dp0\DotNetFX451\NDP451-KB2858728-x86-x64-AllOS-ENU.exe /passive /norestart
echo Installing .Net Framework 4.5.1 Language Pack (German) ...
%~dp0\DotNetFX451\NDP451-KB2858728-x86-x64-AllOS-DEU.exe /passive /norestart
goto INSTALL_APP
:INSTALL_APP
echo Installing Application ...
msiexec /i %~dp0\Setup.msi /qb!
exit
该脚本读取当前安装的.Net Framework(v4.X)的十六进制发布密钥,并将该密钥解析为十进制数字,然后将其与首选.Net Framework的最小发布密钥数字进行比较。 在这里,您将找到这些可能值的列表: 检测.NET Framework (值越高,.Net Framework版本越高)。
该脚本应位于以下目录树中:
|- setup.exe
|- Setup.msi
|- silent_install.cmd
|+ DotNetFX451
|- NDP451-KB2858728-x86-x64-AllOS-DEU.exe
|- NDP451-KB2858728-x86-x64-AllOS-ENU.exe
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.