如何从 VSPackage 获取当前运行的 Visual Studio 安装路径

2023-12-08

我创建了一个VSPackage这应该将一些 XML 架构文件复制到 Visual Studio 的安装路径:%VS install path% \Xml\Schemas.

我的机器上安装了多个 Visual Studio:

  • Visual Studio 2013 专业版。
  • Visual Studio 2015 社区版。
  • Visual Studio Express 版本。

我需要检测path to the Visual Studio从中我的VSPackage正在执行它的命令。

我怎样才能得到当前运行的Visual Studio的安装路径在包裹里?


首先,我同意卡洛斯的观点,即延期不应要求提升特权。但这并不意味着你的问题无法解决;我只是建议用另一种方式来做...

我的一个扩展也遇到了类似的问题;我正在寻找一种不需要 Windows 安装程序设置但适用于纯 VSIX 包的解决方案。我通过创建一个小型控制台应用程序解决了这个问题,我通过我的包程序集引用了该应用程序。我向控制台应用程序添加了一个应用程序清单,允许我请求所需的执行级别;例如:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

控制台应用程序看起来像...

public class HelperExe
{
    public static int Main(params string[] args)
    {
        // TODO: 
    }
}

控制台应用程序将执行需要提升权限的工作。该包使用以下命令创建一个新进程Process班级;图像的文件路径可以从定义程序集获取(因为如果从 VSIX 安装包,这可能是随机路径)。

var consoleAssemblyLocation = new Uri(typeof(HelperExe).Assembly.CodeBase);
var file = new FileInfo(consoleAssemblyLocation.LocalPath);
if (file.Exists)
{
    var consoleProcess = new Process 
    {
        StartInfo = new ProcessStartInfo(file.FullName)
        {
            CreateNoWindow = true
        }
    };

    consoleProcess.Start();
    var timeout = (int)TimeSpan.FromMinutes(5).TotalMilliseconds;
    consoleProces.WaitForExit(timeout);
}

由于清单将涉及UAC提升进程...这还有一个很好的副作用,即用户可以取消该操作。确保您的扩展程序可以处理该问题...

Visual Studio的安装文件夹可以从注册表中读取;您可以通过命令行参数将获得的路径传递给控制台应用程序。我是这样做的...

static string GetVisualStudioInstallationFolder(string visualStudioVersion)
{
    string subKeyName = string.Format(
        CultureInfo.InvariantCulture, 
        @"Software\Microsoft\VisualStudio\{0}_Config", 
        visualStudioVersion);

    using (RegistryKey key = Registry.CurrentUser.OpenSubKey(subKeyName))
    {
        if (key != null)
        {
            return (string)key.GetValue("ShellFolder");
        }
    }

    return null;
}

The visualStudioVersion参数可以从DTE版本财产...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 VSPackage 获取当前运行的 Visual Studio 安装路径 的相关文章

随机推荐

  • 自动完成 Google 地方信息出现错误:此 API 项目无权使用此 API。请确保在 API 控制台中激活此 API

    我正在尝试使用 Google API 开发带有自动完成文本视图的地图 我尝试了这个教程here 但当我尝试获取 API 时 我总是收到此错误 error message This API project is not authorized
  • 用于 INSERT 行数组的 PL/pgSQL 函数

    我想要一个用 PL pgSQL 编写的函数 它接受 行集合 之类的参数 我的意思是我需要将类似字典的结构传递给该函数 伪代码 function name key1 val1 key2 val2 key3 val3 怎么做 使用现代 Post
  • 如何将字符串转换为范围对象

    有没有办法将字符串值转换为 Range 对象 我有一个函数 它接受 Range 对象作为参数 并且需要向它传递一个字符串参数 谢谢 带有单元格地址的字符串 如果是这样 Dim r As Range Set r Range B3 MsgBox
  • 您可以“扩展”(即添加额外的初始化逻辑)Codable 对象的自动生成构造函数吗?

    当你实施Codable对于一个对象 编译器可以自动为您生成一个构造函数 然而 只有当您没有编写自己接受解码器的初始化程序时 它才会执行此操作 也就是说 我们有一个大约 50 的对象let从解码器设置的属性 但我们还有五个基于这些属性的计算属
  • 发现并配对蓝牙设备

    如何使用 Java 发现并配对 Android 蓝牙设备 有什么代码可以参考吗 以下代码将发现已配对和未配对的设备列表 之后您必须实现客户端和服务器 该客户端和服务器负责配对设备并向设备发送数据 因为您可以使用蓝牙聊天示例这会给你一个想法
  • 如何使用 PHP 压缩整个文件夹

    我在 stackoverflow 上找到了一些关于如何压缩特定文件的代码 但是特定文件夹怎么样 Folder index html picture jpg important txt 里面在里面My Folder 有文件 压缩后My Fol
  • “指定”CamelCase 字符串的算法

    非常基本 我只是好奇其他人如何实现这个算法 并想看看是否有任何聪明的技巧来优化算法 我只需要为我正在从事的项目实现这个 给定一个驼峰命名法的字符串 你会如何 空间化 它 例如给定FooBarGork我想福巴高克 back 这是我的 C 算法
  • 如何制作针对特定设备分辨率的模拟器(HTC Cha-Cha)?

    EDIT 大家可以尝试为这款手机做一个模拟器http www gsmarena com htc chacha 3787 php看看我的意思 图标会很大 并且您看到的屏幕与真实手机上的屏幕不一样 以下是规格 显示屏 TFT 电容式触摸屏 25
  • Android ClassNotFound 和 android.view.InflateException:

    我正在尝试将 facebook 集成到我的应用程序中 我正在使用从以下位置下载的 facebook 示例应用程序facebook作为参考 还生成了appId以及所有这一切的过程开发者脸书 我有点懒 所以我不想遍历 facebook sdk
  • 为什么我不能用 NSDateFormatter 正确解析这个日期字符串?

    我正在尝试使用另一个具有相同格式的 NSDateFormatter 来解析由 NSDateFormatter 生成的字符串 下面是一些代码 而不是试图让前面的句子有意义 NSDateFormatter format NSDateFormat
  • Heroku 推送被拒绝,检测到 Ruby 版本已更改,找不到 net-scp-1.0.6

    我不明白这里发生了什么事 我周二部署到 Heroku 没有任何问题 我没有在本地或 Gemfile 上更改我的 Ruby 版本 但 heroku 告诉我我已经更改了 Ruby 版本并且无法找到 net scp 1 0 6 一切都在本地完美运
  • 如何在某一列具有相同值的行中查询具有最高列值的行

    我有 UserScores 表 其中包含如下数据 Id userId Score 1 1 10 2 2 5 3 1 5 我想要一个可以提供以下输出的查询或 SQL 块 Id userId Score 3 1 5 2 2 5 也就是说 我想选
  • AS3.0 重播整部电影(*SWF 文件)

    我用 Actionscript 3 0 和 flash 制作了一个小游戏 当玩家赢得游戏或 游戏结束 时 玩家应该可以选择重玩游戏 所以我的问题是 有没有办法用 Actionscript 重播整部电影 我知道 我可以将时间线重置回 0 并重
  • Struts2,无法使用 标记访问参数。想要在 标签中使用它

    我有一种情况需要将导航栏放在每个页面的顶部 因此 我决定在每个页面中包含一个新的 JSP 其中包含一个参数 指示用户所在的活动选项卡是什么 我的实现如下 仪表板 jsp
  • 如何将大型 gem 转换为独立的 Rails 应用程序

    我正在构建一个社交网络 并一直在使用 gem Community engine 但在实现我的应用程序所需的大量自定义时遇到了困难 我认为这将使我更容易覆盖和添加方法 并帮助我更好地理解和学习代码 因为我将能够实际看到所有代码的实际运行 到目
  • 使用 php 按单词或文本过滤 csv 文件

    我有另一个 csv 文件 我正在尝试做一个简单的单词过滤器 例如 我的 text csv 文件如下所示 name age hobbies Tom 8 football soccer baseball wii star wars books
  • 使用hugo框架向网页添加图像

    我想将图像发布到我的博客上 是的 就这么简单 我的网站托管在 GitLab Pages 上 并使用 Hugo 框架 v0 23 我从这里分叉了我的网页 https gitlab com pages hugo 因此我的博客文件夹结构是相同的
  • ReferenceError:未定义 FullCalendar

    我现在一直在尝试使用文档中提供的示例来实现 fullcalendar 当我尝试运行它时 我收到此错误 ReferenceError 未定义 FullCalendar 我知道这条消息的含义 但我必须在哪里以及如何定义它 document ad
  • Rails 3 和 HTML 5 微数据

    在 Rails 中 是否可以使用任何 ActionView Helpers 创建 HTML 5 无值属性 我正在尝试为 google 创建 HTML 5 itemprop 微数据面包屑 这是我想要生成的输出 div div 但你可以看到项目
  • 如何从 VSPackage 获取当前运行的 Visual Studio 安装路径

    我创建了一个VSPackage这应该将一些 XML 架构文件复制到 Visual Studio 的安装路径 VS install path Xml Schemas 我的机器上安装了多个 Visual Studio Visual Studio