一、前言

       今年开始安装了VS2017,有时候需要使用到脚本编译,奈何MS在VS2017上的脚本编译上不再支持VS2015那种 "%VS140COMNTOOLS%vsvars32.bat",我真是服了。那么没办法,我使用devenv总可以吧,于是我就写了一段程序用于获取最新版本VS的devenv。网上招数也挺多的,什么vswhere,什么判断绝对路径,等等。我觉得我还是从注册表作为突破口比较好。

二、代码

var hasVS = false;
var registryPath = @"SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7";
var localMachineRegistry = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, Environment.Is64BitOperatingSystem ? RegistryView.Registry64 : RegistryView.Registry32);
var vsPaths = ReadRegistryInfo(localMachineRegistry, registryPath);
var highestVSdevenvPath = string.Empty;
if (vsPaths != null && vsPaths.Any())
{
var tempVersion = ;
foreach (KeyValuePair<string, string> kvp in vsPaths)
{
var devenvExePath = Path.Combine(kvp.Value, @"Common7\IDE\devenv.exe");
if (File.Exists(devenvExePath))
{
var currentVersion = Convert.ToInt32(kvp.Key.Split('.')[]);
if (currentVersion > tempVersion)
{
tempVersion = currentVersion;
highestVSdevenvPath = devenvExePath;
}
}
} if (!string.IsNullOrEmpty(highestVSdevenvPath))
{
hasVS = true;
}
} //Read Registry Info
public Dictionary<string, string> ReadRegistryInfo(RegistryKey registryKey, string registryInfoPath)
{
    if (registryKey == null || string.IsNullOrEmpty(registryInfoPath)) return null;
    try
    {
         RegistryKey rsg = registryKey.OpenSubKey(registryInfoPath, false);
         if (rsg != null)
         {
             var keyNameArray = rsg?.GetValueNames();
             var result = new Dictionary<string, string>();
             foreach (var name in keyNameArray)
             {
                  string keyValue = (string)rsg.GetValue(name);
                  result.Add(name,keyValue);
             }
             rsg.Close();
             return result;
         }
         return null;
   }
   catch
   {
         return null;
    }
}

找到了devenv.exe,那么剩下的事情就都好办了,搞一个C#编译混淆打包小工具妥妥的。

三、结尾

这篇可能是在老东家时期写的最后一篇博客了,下个月就去设计院担任数字中心第一位BIM/Revit软件工程师。两年来在公司学到很多很多,来自Autodesk的老师傅们手把手的把我培养成一名全栈工程师,真的感谢他们!我这个行业圈子很小,来日方长,说不定哪天又相聚了。祝福我的同事们和领导们,谢谢他们!

C#基础-如何找到devenv的路径位置的更多相关文章

  1. python基础之open函数和路径处理

    前言 本次内容主要介绍文件处理open函数以及路径处理. 一.open函数 根据前面介绍的函数调用方式,调用open函数. #open函数调用 open() TypeError: open() mis ...

  2. 在一个exe文件中查找指定内容,找到则返回起始位置, 否则返回0

    //在一个exe文件中查找指定内容,找到则返回起始位置, 否则返回0//如果某字符串, 直接传入字符串进来//如果要查找16进制,则用如下格式传参进来: #$1A#$2A#$3A function F ...

  3. windows phone 7 定位(获取经纬度),然后找到经纬度所在的位置(城市信息)

    原文:windows phone 7 定位(获取经纬度),然后找到经纬度所在的位置(城市信息) 前几天做项目用到, 代码贴给大家. /// <summary> /// 获取当前位置的经纬度 ...

  4. JS基础 复习: Javascript的书写位置

    爱创课堂JS基础 复习: Javascript的书写位置复习 js书写位置:body标签的最底部.实际工作中使用书写在head标签内一对script标签里.alert()弹出框.console.log ...

  5. vc++基础班[24]---系统各种路径信息的获取

    vc++基础班[24]---系统各种路径信息的获取 ------------------------------------------ Begin ------------------------- ...

  6. HDFS不存在绝对路径,无法找到文件所在具体位置

    This is set in the dfs.datanode.data.dir property, which defaults to file://${hadoop.tmp.dir}/dfs/da ...

  7. 使用mysqlbinlog工具的基础上及时恢复数据的位置或点

    使用mysqlbinlog工具的基础上及时恢复的位置或点 MySQL备份一般采取完全备份的形式加日志备份.让我们运行一个完整备份,每天.每小时运行二进制日志备份. 这样在MySQL Server故障后 ...

  8. PHP从数组中找到指定元素的位置

    群里有人问,有个数组五个元素 分为1到5  现在要求 循环找出3元素的索引,怎么做性能才是最高. 我不知道哪个性能最高,但是我想提出可以用多种方式进行查找,然后进行比较选择. 我想,最简单最基础的 应 ...

  9. 更改android AVD模拟器创建路径位置的方法

    打开:计算机-->系统属性-->环境变量—>在“系统变量”那选择“新建”-->变量名为 "ANDROID_SDK_HOME” (注意,必须为这个名字!),然后把变量值 ...

随机推荐

  1. Linux命令对应的英文及整体学习法

    linux命令 注意一下内容收集与互联网,如果觉得有版权问题,请联系. 用Linux命令的时候,如果熟悉对应英文的含义,更有助于理解相应的命令.man: Manual 意思是手册,可以用这个命令查询其 ...

  2. 火狐插件安装-基于web自动化测试

    一.Firebug 安装 1.  打开火狐浏览器—选择右上角“打开菜单”(图一)----附件组件(图二) 图一 图二 2.  点击:扩展(图三)—-------用于所有附加组件的工具(图四)----选 ...

  3. React Native移动开发实战-4-Android平台的适配原理

    打开Android开发工具Android Studio,选择菜单 Open an existing AndroidStudio project,打开ch04项目的android文件夹,如图5.8所示. ...

  4. NO.6:自学python之路------面向对象、内存持久化

    引言 虽然加速学习了,可是还是感觉进度不够快,担心.还得准备毕业论文,真是焦虑. 正文 面向对象 编程是程序员用特定语法+数据结构+算法组成的代码,告诉计算机如何执行任务的过程.对不同的编程方式的特点 ...

  5. linux 其他知识目录

    博客目录总纲首页 为博客园添加目录的方法总结 linux 命令自动补全包 手动配置网卡 nginx日志统计 Linux 深入理解inode/block/superblock /proc/sys目录下各 ...

  6. 使用git-premit时的问题

    package.json 相关配置如下 { "scripts": { "lint": "eslint pages/* component/* --fi ...

  7. 通过NPM快速发布你的NodeJS模块(组件包)

    1.更新 NPM - [ npm install -g npm | 该步骤可选:最好使用新版本] 楼主当前版本号 2.6.1 ,如果更新报错,可以尝试 国内淘宝镜像 $ npm -v 2.6.1 // ...

  8. 为什么每次进入命令都要重新source /etc/profile 才能生效?

    https://segmentfault.com/q/1010000005981201

  9. 软件共享平台的NABCD

    Need: 我感觉我们这个软件很适合现在的大学生,特别是大一大二的学生,由于在大学里面学生都在各忙各的,学生遇到问题如果自己在网上查找,这就需要花费大量的时间,如果有了这个软件学生和老师都可以在这个平 ...

  10. spring冲刺阶段之团队工作总结

    一.小组成员: 王俊凯(项目经理) 罗林杰(产品负责人) 王逸辉(Master) 罗凯杰 二.任务分配情况 王俊凯:生成题目的代码编写并提出编写意见 罗林杰:负责把按钮和界面内容连接到代码上及主要代码 ...