1

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

我的解决方案中的安装项目生成 2 个文件:setup.exeapp.msi,分别是引导程序和 MSI 文件。

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

因此,我试图同时启动两者setup.exe,并且app.msi在安装和未安装 .NET 的情况下安装完全静默。

msiexec /i app.msi /qn

这在安装了 .NET 的机器上静默运行,而在未安装 .NET 的机器上静默失败。

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

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

4

1 回答 1

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 burn)具有内置的 .NET 检测功能,并且对黑帽更不透明
于 2013-03-05T04:02:29.453 回答