【发布时间】:2020-05-31 20:57:01
【问题描述】:
如何找出用户机器上安装了哪些 Visual Studio 扩展?
我想在 AD 环境中跟踪用户计算机上安装了哪些 VS 扩展。我认为通过 Windows Installer (*.msi) 安装扩展程序时这很容易。但是 VSIX 扩展 (vsixinstaller.exe) 呢?
【问题讨论】:
标签: windows visual-studio active-directory vsix sccm
如何找出用户机器上安装了哪些 Visual Studio 扩展?
我想在 AD 环境中跟踪用户计算机上安装了哪些 VS 扩展。我认为通过 Windows Installer (*.msi) 安装扩展程序时这很容易。但是 VSIX 扩展 (vsixinstaller.exe) 呢?
【问题讨论】:
标签: windows visual-studio active-directory vsix sccm
我知道没有直接的方法可以列出所有已安装的 VSIX 扩展,但vsixInstaller 可以选择生成一个日志文件,用于标识它找到的extension.vsixmanifest 文件,每个这样的文件都是一个包含有关扩展的相关详细信息(名称、版本等)。
要让vsixInstaller 生成日志文件,请假装卸载不存在的扩展。这可能需要一段时间,尤其是在安装了多个版本的 VS 时(以下必须全部放在一行中)。
C:\Program Files (x86)\Microsoft Visual Studio\Installer\resources\
app\ServiceHub\Services\Microsoft.VisualStudio.Setup.Service>
vsixInstaller /logFile:vsix.log /appIdName:VS /uninstall:nosuchxt
然后生成的日志文件将是%TEMP%\vsix.log 并且Found 行指向vsixInstaller 所在的扩展名,例如(根路径替换为%VS20xx%):
vsixinstaller.exe version:
16.5.2047
...
BEGIN: Processing extension pack
...
Found '%ProgramFiles(x86)%\COMMON FILES\MICROSOFT\EXTENSIONMANAGER\EXTENSIONS\Microsoft\Windows Kits\10\Desktop SDK\extension.vsixmanifest'
...
Found '%VS2015%\COMMON7\IDE\EXTENSIONS\VSSDK\extension.vsixmanifest'
...
Found '%VS2019%\COMMON7\IDE\EXTENSIONS\VSSDK\extension.vsixmanifest'
...
END: Processing extension pack
列表中引用的每个extension.vsixmanifest 文件都以metadata 节点开头,该节点标识相应扩展的名称和版本,例如:
<Metadata>
<Identity Id="Microsoft.VisualStudio.SDK"
Version="16.0"
Language="en-US"
Publisher="Microsoft Corporation" />
<DisplayName>Microsoft Visual Studio SDK</DisplayName>
<Description>Tools for building Visual Studio extensions</Description>
</Metadata>
通过一些(不完全是微不足道的)管道工作,这一切都可以在脚本/批处理作业中自动化。
【讨论】:
我怀疑IVsExtensionManager.GetInstalledExtensions API 是您正在寻找的。p>
此外,Mad 发布了一个开源“Extension Manager 2019”扩展,它实现了导出/导入扩展命令,您可能会发现这是一个有用的示例。
扩展的源代码可以在以下 github repo 中找到:
真诚的
【讨论】: