繁体   English   中英

启动条件阻止静默安装(Application + .Net Framework)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM