一、前言

       今年开始安装了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. RHEL7 利用单个物理网卡实现VLAN

    使用nmcli创建网桥配置 #nmcli connection add type bridge con-name br0 stp no 使用nmcli创建VLAN设备配置 #nmcli connect ...

  2. codeforces 1133E K Balanced Teams

    题目链接:http://codeforces.com/contest/1133/problem/E 题目大意: 在n个人中找到k个队伍.每个队伍必须满足最大值减最小值不超过5.求满足条件k个队伍人数的 ...

  3. tf导出pb文件,以及如何使用pb文件

    先罗列出来代码,有时间再解释 from tensorflow.python.framework import graph_util import tensorflow as tf def export ...

  4. SQL IF while 游标

    -- if语句使用示例 declare @a int set @a=1 begin print @a =@a+1 end else begin print 'noooo' end -- while语句 ...

  5. 软件功能说明书beta修订

    贪吃蛇(单词版)软件功能说明书beta修订 1 开发背景 “贪吃蛇”这个游戏对于80,90后的人来说是童年的记忆,可以将其说为是一个时代的经典,实现了传统贪吃蛇的游戏功能:现在人们对英语的重视程度越来 ...

  6. 第十二次作业psp

    psp 进度条 代码累积折线图 博文累积折线图 psp饼状图

  7. web06-PanduanLogin

    电影网站:www.aikan66.com 项目网站:www.aikan66.com 游戏网站:www.aikan66.com 图片网站:www.aikan66.com 书籍网站:www.aikan66 ...

  8. 使用switchPage.js插件jQuery全屏滚动翻页

    1. 先引入jquery.js,再引入switchPage.js 文件地址:点击打开链接 <script src="jquery.min.js"></script ...

  9. spring冲刺第一天

    第一天总结 昨天我们开始了spring冲刺会议,我们进行了明确的分工,每个人都有自己的任务.我的目前任务是游戏地图的初步设计. 今天早上我们开了站立会议,算是正式开始了spring冲刺.我上网查找了一 ...

  10. c#学习路线及目录导航

    一 很久前的想法 转眼间,2018年已经过了四分之一,从我进入学校选择计算机专业到现在工作,已经过去了4年之久了.这一路走来经历了很多的曲折,对软件开发这个职业有了许多新的认识,我主要是从事NET领域 ...