如何使用Visual Studio安装项目检测依赖项并中止安装

时间:2013-01-04 19:20:18

标签: .net visual-studio-2010 visual-studio-setup

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

检测现有应用

除非已安装其他应用程序,否则我不需要安装应用程序。例如,如果PC上未安装MS Office,则警告用户并中止安装。

检测GAC中安装的程序集

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

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

2 个答案:

答案 0 :(得分:5)

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

您可以通过右键单击Setup Project并选择

来打开启动条件编辑器

查看 - > 启动条件

enter image description here

检测现有应用

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

Office 10搜索Office 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

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

enter image description here

答案 1 :(得分:0)

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

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

  1. 如果已安装先决条件应用
  2. 如果程序集在GAC中
  3. 如果其中一个检查失败,则可以抛出异常,安装将停止。

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

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

    希望这有帮助

    干杯, DK