只需使用产品代码{388E4B09-3E71-4649-8921-F44A3A2954A7}调用MsiGetProductInfo()即可轻松检查是否安装了VSTO 2005 SE,如MSDN中所列出的。
VSTO 2010/4.0运行时的产品代码是什么?还是有更好的方法来确定它是否已安装?这是针对我们的安装流程。
此外,我正在尝试找出同样适用于Windows 映像组件的方法。
只需使用产品代码{388E4B09-3E71-4649-8921-F44A3A2954A7}调用MsiGetProductInfo()即可轻松检查是否安装了VSTO 2005 SE,如MSDN中所列出的。
VSTO 2010/4.0运行时的产品代码是什么?还是有更好的方法来确定它是否已安装?这是针对我们的安装流程。
此外,我正在尝试找出同样适用于Windows 映像组件的方法。
很遗憾,到目前为止,这里的回答似乎并没有涵盖所有方面。
产品代码
这似乎不太可靠——我们正在寻找一个最低版本,而不是一个特定版本。虽然理论上产品代码仅应在主要版本增量时更改,但我机器上的VSTO版本(10.0.40303)的产品代码为{A0FE0292-D3BE-3447-80F2-72E032A54875}。这表明Microsoft并不一定保持它们的稳定性,因此我建议这不是一个好的选择。
文件版本
另一个选择可能是检查VSTO程序集本身的存在/版本,这些程序集通常位于%PROGRAM FILES%\Common Files\Microsoft Shared\VSTO\10.0中。然而,我会说这个目录并不保证——实际目录似乎在注册表中指定,但显然这个解决方案现在不比直接从注册表获取版本好...
注册表
因此,按照注册表来看可能是唯一剩下的选择。
不幸的是,VSTO运行时版本可以出现在4个注册表位置之一:
注意:我没有确定的信息来源-我从Wouter van Vugt的博客文章和这个SO答案等地方搜集信息。可能还有更多的内容。
此外,可能存在最低版本要求,但我怀疑实际上只会影响运行Office 2010预发布版本的人:
Visual Studio 2010 用于 Office 的工具运行时环境也随 Microsoft Office 2010 一起发布。但是,在 Office 2010 RTM 时,Office 中的运行时仅支持针对 .NET Framework 3.5 的 Office 解决方案。如果您的解决方案针对 .NET Framework 3.5,则可以在安装 Office 2010 或 Visual Studio 2010 用于 Office 运行时可再发行软件包的情况下运行。如果您的 Office 解决方案针对 .NET Framework 4,则必须重新分发 Visual Studio 2010 用于 Office 的工具运行时环境(citation)。最简单的方法是检查注册表。
HKLM\Microsoft\vsto runtime setup\v4\Install
HKLM\Microsoft\vsto runtime setup\v4R\VSTORFeature_CLR40(这适用于4.0版Office扩展)
VSTORFeature_
只存在于 x64 安装中。请参见下面的答案以获取 x86 安装。 - Paul Nikonowiczhttp://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
我需要一种在 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"}
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;
}