具有先决条件的完全无声的MSI安装程序

时间:2013-01-28 10:48:35

标签: c# .net installation windows-installer bootstrapper

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

我的解决方案中的安装项目产生了两个文件:setup.exeapp.msi,一个引导程序和MSI文件。

另外:安装总是处于提升权限之下,这是一个安全的假设。

因此,我尝试以安装完全静默的方式启动setup.exeapp.msi,以防安装和未安装.NET。

msiexec /i app.msi /qn

这在安装了.NET的计算机上静默运行,并且在没有安装.NET的计算机上静默失败。

其他组合非静默地工作或显示一些弹出窗口。

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

1 个答案:

答案 0 :(得分:1)

引导程序的目的是安装一个包链,通常是一组先决条件(有条件地安装)然后是主包。你的没有安装先决条件。

一种廉价的方法是使用脚本(甚至像批处理文件一样简单)作为引导程序:检测.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也是如此。不要将它们与真实客户一起使用。一个好的引导程序(例如WiX 刻录)具有.NET检测功能 内置并且对黑帽子更不透明