如何确定是否安装了VSTO 2010 Runtime?

时间:2010-05-10 01:56:38

标签: installation vsto ms-office

只需使用产品代码{388E4B09-3E71-4649-8921-F44A3A2954A7}调用MsiGetProductInfo(),listed in MSDN即可轻松检查是否安装了VSTO 2005 SE。

VSTO 2010 / 4.0运行时的产品代码是什么?或者有更好的方法来确定它是否已经安装?这是我们的安装过程。

另外,我试图为Windows Imaging Component找出相同的内容。

6 个答案:

答案 0 :(得分:16)

不幸的是,到目前为止,这里的答案还没有涵盖所有基础。

产品代码

这似乎不可靠 - 我们正在寻找最低版本,而不是特定版本。虽然产品代码理论上只应更改为主要版本增量,但我机器上的VSTO版本 - 10.0.40303 - 的产品代码为 {A0FE0292-D3BE-3447-80F2-72E032A54875} 。这表明微软并不一定能保持稳定,所以我建议这不是一个好的选择。

文件版本

另一个选项可能是检查VSTO程序集本身的存在/版本,这些程序通常可能位于%PROGRAM FILES%\ Common Files \ Microsoft Shared \ VSTO \ 10.0中。但是我会说这个目录不能保证 - 实际目录似乎是在注册表中指定的,但显然这个解决方案现在没有比直接从注册表中获取版本更好......

<强>注册表

因此,通过注册表可能是唯一的选择。

不幸的是,VSTO运行时版本可以出现在4个注册表位置中的任何一个位置:

  • HKLM \ SOFTWARE \ Microsoft \ VSTO运行时安装程序\ v4 (32位,从Office 2010安装中安装VSTO)
  • HKLM \ SOFTWARE \ Microsoft \ VSTO运行时安装程序\ v4R (32位,可从可再发行安装的VSTO)
  • HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ VSTO Runtime Setup \ v4 (64位,从Office 2010安装安装VSTO)
  • HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ VSTO运行时安装程序\ v4R (64位,可从可再发行安装的VSTO)

注意:我没有确切的来源 - 我正在拼凑一些信息,例如this blog post by Wouter van Vugtthis SO answer。可能还有更多。

此外,可能存在最低版本要求,但我怀疑实际上这只会影响运行Office 2010预发布版本的用户:

  

适用于Office运行时的Visual Studio 2010工具也附带   Microsoft Office 2010.但是在Office 2010 RTM时,   Office的运行时仅支持以其为目标的Office解决方案   .NET Framework 3.5。如果您的解决方案针对.NET Framework 3.5,   如果安装了Office 2010或Visual Studio,它可以运行   2010安装了Office Runtime可再发行工具。如果你的   Office解决方案以.NET Framework 4为目标,您必须重新分发   用于Office运行时的Visual Studio 2010工具(citation)。

答案 1 :(得分:10)

最简单的方法是检查注册表。

HKLM \ Microsoft \ vsto运行时设置\ v​​4 \ Install

HKLM \ Microsoft \ vsto运行时设置\ v​​4R \ VSTORFeature_CLR40(这适用于4.0 Office扩展)

答案 2 :(得分:3)

最安全,最干净的方法仍然是检查产品代码,这里是:

对于VSTO 2010 x86,版本10.0.31124: {41A01180-D9FD-3428-9FD6-749F4C637CBF}

对于VSTO 2010 x64,版本10.0.31124: {C3600AE6-93A0-3DB7-B7AA-45BD58F133B5}

我通过使用7-Zip提取以下包的内容并使用Orca分析MSI来获得它们:

http://download.microsoft.com/download/F/3/9/F395E3C2-28A0-4F0D-9E20-FF4D1ADB08D8/vstor40_x86.exe

http://download.microsoft.com/download/F/3/9/F395E3C2-28A0-4F0D-9E20-FF4D1ADB08D8/vstor40_x64.exe

答案 3 :(得分:1)

它们的密钥因您安装的操作系统而异。我在x86和x64中精心安装了独立的vsto和office 2010和2013 .exe。 为了使用注册表检查是否安装了vsto,您需要验证是否存在以下密钥:

  

for x64:

     
      
  • HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ VSTO Runtime Setup \ v4 - &gt;安装

  •   
  • HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ VSTO Runtime Setup \ v4 - &gt;产品代码

  •   
     

for x86:

     
      
  • HKLM \ SOFTWARE \ Microsoft \ VSTO运行时设置 - &gt; InstallerPath
  •   

编辑:我实际上最终做的是验证v4文件夹是否存在。

答案 4 :(得分:0)

在SCCM 2012中将Vstor部署为应用程序时,我需要一种检测方法。我使用以下PowerShell脚本从WMI检索信息。

如果版本是10.0.50908,则生成输出。如果检测脚本返回任何值,SCCM认为检测成功。

$VstorVersion = Get-WmiObject -Query "select ProductVersion from SMS_InstalledSoftware where ARPDisplayName = 'Microsoft Visual Studio 2010 Tools for Office Runtime (x64)'" -NameSpace "root\cimv2\sms"
if ($VstorVersion.ProductVersion -ge '10.0.50908') {Write-Host "Found"}

答案 5 :(得分:-2)

这里的代码。 在公共方法中,我们确定是从Office或VSTO运行时包安装的VSTO。 在私有方法中,检查版本是否等于或大于版本VSTO2010

public static bool CheckVSTO2010 ( ) {
        string regFragment = IntPtr.Size == 8 ? "\\Wow6432Node\\" : "\\";
        string regVSTO = string.Format( @"SOFTWARE{0}Microsoft\VSTO Runtime Setup\", regFragment );
        return CheckVSTOVersion( regVSTO + "v4\\" ) || CheckVSTOVersion( regVSTO + "v4R\\" );
    }


    private static bool CheckVSTOVersion ( string keyPath ) {
        using (var key = Registry.LocalMachine.OpenSubKey( keyPath )) {
            //Not installed
            if (key == null) {
                return false;
            }
            var releaseKey = key.GetValue( "Version" );
            if (releaseKey != null && !string.IsNullOrEmpty( releaseKey.ToString() )) {
                var version = new Version( releaseKey.ToString() );
                return version.Major >= 10 && version.Build >= 40820;
            }
        }
        return false;
    }