我已在Visual Studio 2013中为我的应用程序添加了一个安装部署项目,以便为我的应用程序生成安装向导,并为提供静默安装的 Setup.msi -File生成。
执行msiexec /i "<PathToSetupDirectory>\Setup.msi" /qb!
按预期工作。我的应用程序是静默安装的。但我的C#-Application依赖于.Net-Framework 4.5.1。如果没有安装,则启动条件会提升:
此设置需要.NET Framework版本VersionNumber。请安装.NET Framework并再次运行此安装程序。 .NET Framework可以从Web获得。你现在想这样做吗?
当然我不想这样做。这应该会自动生效。
所以我在Setup Deployment Project (right click) => Properties => Prerequisites...
中选择了框架,检查了&#34;从与我的应用程序相同的位置下载先决条件&#34; 并将NDP451-KB2858728-x86-x64-AllOS-ENU.exe
添加到目录{ {1}}。
我希望如果框架尚未安装,Setup.msi不会显示启动条件的消息。它应该简单地安装 .Net Framework 和应用程序后,无需任何用户交互。但它仍然出现了。按否会导致退出安装。按是会打开浏览器并退出安装。
当然,我可以编写一个bash脚本,如果需要,可以静默安装 .Net Framework ,最后启动我的应用程序的静默安装。但我想实现这个&#34;正确的方式&#34; 。我觉得我错过了 东西。
有什么想法吗?
答案 0 :(得分:1)
MSI安装也无法安装.NET Framework,主要是因为MSI设置无法递归安装另一个MSI设置(NET FW)。这是在MSI文件之前必须安装许多先决条件的原因之一,VS设置使用setup.exe。
据我所知,setup.exe引导程序没有静默选项,但这是因为许多先决条件都没有静默安装。曾经有一个工具(Bootstrap Manifest Generator)可以用来改变包含命令行安装的嵌入式文件,以便使它们保持沉默:
https://msdn.microsoft.com/en-us/library/ms165429.aspx
所以这仍然是一个选择。
另一种选择是使用WiX引导程序工具&#34; Burn&#34;创建一个包将安装框架然后你的MSI静默。它基本上是一个Xml驱动的依赖项规范和你的MSI文件。
答案 1 :(得分:0)
向PhilDW致以明确这个话题。很高兴知道使用msi文件是不可能的。我已经阅读了关于WiX引导程序工具“Burn”和Bootstrap Manifest Generator的内容,并得出结论写一个简单的批处理文件。这将检测是否安装了.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的最小版本密钥编号进行比较。您可以在此处找到这些可能值的列表:Detecting the .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