C# 具有先决条件的完全静默MSI安装程序

C# 具有先决条件的完全静默MSI安装程序,c#,.net,installation,windows-installer,bootstrapper,C#,.net,Installation,Windows Installer,Bootstrapper,我有一个简单的C#应用程序,我需要为它创建一个静默安装程序。我正在使用Visual Studio安装程序(基于MSI)。由于它是C#应用程序,安装程序必须作为先决条件安装.NET framework 我的解决方案中的安装项目分别生成两个文件:Setup.exe,和app.msi,一个引导程序和msi文件 另外:安装将始终处于提升权限下,这是一个安全的假设 因此,我尝试启动setup.exe和app.msi,在安装和未安装.NET的情况下,安装是完全静默的 msiexec /i app.msi /

我有一个简单的C#应用程序,我需要为它创建一个静默安装程序。我正在使用Visual Studio安装程序(基于MSI)。由于它是C#应用程序,安装程序必须作为先决条件安装.NET framework

我的解决方案中的安装项目分别生成两个文件:
Setup.exe
,和
app.msi
,一个引导程序和msi文件

另外:安装将始终处于提升权限下,这是一个安全的假设

因此,我尝试启动
setup.exe
app.msi
,在安装和未安装.NET的情况下,安装是完全静默的

msiexec /i app.msi /qn
这在安装了.NET的计算机上以静默方式工作,在未安装.NET的计算机上以静默方式失败

msiexec /i app.msi /qn
其他组合以非静默方式工作或显示一些弹出窗口

那么,有没有可能使这种安装过程保持沉默?
或者,至少,让.NET安装显示弹出窗口,但应用程序本身必须是静默的(此外,不应出现与.NET安装无关的“安装程序正在初始化组件”等其他弹出窗口)

引导程序的目的是安装一系列包,通常是一组先决条件(有条件地安装)然后是主包。您的未安装prereq

一种便宜的方法是使用一个脚本(甚至像批处理文件一样简单)作为引导程序:检测.NET,如果没有,运行.NET安装程序包,然后运行主程序包安装:

@echo off
rem this key/value is how WiX detects .NET 4.0 Full installation
reg query "HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full" /v InstallPath >NUL 2>&1
rem sets ERRORLEVEL==0 if present, ERRORLEVEL==1 if absent

rem if .NET not found, install it:
if ERRORLEVEL 1 dotNetFx40_Full_setup.exe

rem now install main program
msiexec /i app.msi /qn
注意事项:

  • 注册表项名称因.NET版本而异
  • 为了安全起见,某些系统管理员会删除或禁用reg.exe命令 理由
  • 有时.NET安装程序会在您身上重新启动,而您 第一次尝试时无法访问主程序包
  • 刚安装的.NET Framework有时在重新启动后才会完全激活
  • .bat文件非常容易被黑客攻击。VBScript、JScript或其他类似的东西也是如此。不要将它们用于真正的客户。一个好的引导程序(例如WiXburn)具有.NET检测功能 内置,对黑色帽子更不透明

引导程序的目的是安装一系列软件包,通常是先安装一组先决条件(有条件地安装),然后安装主软件包。您的未安装prereq

一种便宜的方法是使用一个脚本(甚至像批处理文件一样简单)作为引导程序:检测.NET,如果没有,运行.NET安装程序包,然后运行主程序包安装:

@echo off
rem this key/value is how WiX detects .NET 4.0 Full installation
reg query "HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full" /v InstallPath >NUL 2>&1
rem sets ERRORLEVEL==0 if present, ERRORLEVEL==1 if absent

rem if .NET not found, install it:
if ERRORLEVEL 1 dotNetFx40_Full_setup.exe

rem now install main program
msiexec /i app.msi /qn
注意事项:

  • 注册表项名称因.NET版本而异
  • 为了安全起见,某些系统管理员会删除或禁用reg.exe命令 理由
  • 有时.NET安装程序会在您身上重新启动,而您 第一次尝试时无法访问主程序包
  • 刚安装的.NET Framework有时在重新启动后才会完全激活
  • .bat文件非常容易被黑客攻击。VBScript、JScript或其他类似的东西也是如此。不要将它们用于真正的客户。一个好的引导程序(例如WiXburn)具有.NET检测功能 内置,对黑色帽子更不透明