3

在使用使用 Visual Studio 2010 创建的安装程序安装和应用程序之前,我需要检测 2 个条件。

检测现有应用程序

除非已经安装了另一个应用程序,否则我不需要安装应用程序。例如,如果 PC 上未安装 MS Office,则会提醒用户并中止安装。

检测安装在 GAC 中的程序集

我还需要检查程序集是否在 GAC 中。检查 GAC 中是否有特定版本或更高版本是理想的。

我不想包含程序集或安装先决条件。我只需要验证它是否已安装,如果没有提醒用户并中止安装。

4

2 回答 2

6

处理这种情况的最好方法是使用启动条件

您可以通过右键单击您的设置项目并选择来打开启动条件编辑器

View->Launch Conditions

在此处输入图像描述

检测现有应用程序

一种检测现有应用程序的方法,您可以设置注册表搜索和启动条件(右键单击搜索目标机器 -> 添加注册表搜索)

登记处搜索办公室 10 的属性可能是

Name: Search for Office 10
Property: OFFICE10REGISTRY
RegKey: SOFTWARE\Microsoft\Office\10.0\Common\InstallRoot
Root: vsdrrHKLM
Value: Path

然后您可以使用这些属性添加启动条件

Name: Office Installed Condition
Condition: OFFICE10REGISTRY
Message: Office 10 not detected

如果您想搜索任何 Office 版本,您可以创建多个注册表搜索,然后使用OFFICE10REGISTRY OR OFFICE11REGISTRY OR OFFICE12REGISTRY.

检测安装在 GAC 中的程序集

这次你添加一个文件搜索来搜索 gac 中安装的文件。

Name:Search for Assembly In GAC
Depth: 5
FileName: Microsoft.JScript.dll
Folder: [WindowsFolder]\assembly\GAC\Microsoft.JScript
MaxVersion: 8
MinVersion: 7
Property: JSCRIPTEXISTS

请注意,文件名是 dll,文件夹遵循命名空间的模式。另请注意,如果需要,您可以仅指定最低版本。

然后添加启动条件

Name: Assembly Gac Condtion
Condition: JSCRIPTEXISTS
Message: Missing JScript

完成后,最终结果可能如下所示

在此处输入图像描述

于 2013-01-07T23:01:53.220 回答
0

由于您需要进行 2 次检查,我建议您通过派生 Installer 类来编写自定义安装步骤 (http://msdn.microsoft.com/en-us/library/79e7ka7s(v=vs.100).aspx)

在这里你应该重写 OnBeforeInstall 方法并编写你的逻辑来检查

  1. 如果安装了先决条件应用程序
  2. 如果程序集在 GAC 中

如果任一检查失败,您可以抛出异常,安装将停止。

对于 prereq 应用程序,我建议您检查注册表配置单元。Windows 为每个已安装的应用程序创建一个注册表项。

对于 GAC 检查,我建议您尝试在不指定路径的情况下反射加载程序集。如果程序集加载,可以安全地假设它在 GAC 中

希望这可以帮助

干杯,丹麦

于 2013-01-04T20:06:57.420 回答