【问题标题】:How do I detect dependencies and abort an install using Visual Studio Setup projct如何使用 Visual Studio 安装项目检测依赖项并中止安装程序
【发布时间】:2013-01-04 19:20:17
【问题描述】:

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

检测现有应用程序

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

检测安装在 GAC 中的程序集

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    查看->启动条件

    检测现有应用程序

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

    注册表搜索办公室 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
    

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

    【讨论】:

      【解决方案2】:

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

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

      1. 如果安装了必备应用程序
      2. 如果程序集在 GAC 中

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

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

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

      希望对你有帮助

      干杯, 丹麦

      【讨论】:

      • 谢谢 DK。我考虑了注册表配置单元,但不确定,我阅读了几篇关于创建一个类来测试加载程序集以查看它是否可用的帖子,但我没有意识到我可以从安装程序类中做到这一点。下周我会试试这个。再次感谢。
      猜你喜欢
      • 1970-01-01
      • 2015-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多