检测是不是从在 3.5 上运行的 C# 代码安装了 MSBuild/.net 4?

Posted

技术标签:

【中文标题】检测是不是从在 3.5 上运行的 C# 代码安装了 MSBuild/.net 4?【英文标题】:Detecting if MSBuild/.net 4 is installed from C# code running on 3.5?检测是否从在 3.5 上运行的 C# 代码安装了 MSBuild/.net 4? 【发布时间】:2011-03-04 06:17:13 【问题描述】:

我有一个在 .net 3.5 SP1 上运行的应用程序,它应该检查是否安装了 .net 4。

实际上,如果安装了 MSBuild v4,我会更感兴趣,这可以归结为一个简单的File.Exists(@"C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe");

不过,除了 4.0.30319 版本的脆弱(还有 Windir,不过这很容易解决),不知道有没有更合适的方式,比如 API?

【问题讨论】:

【参考方案1】:

我看到了this blog post,但希望@JaredPar 或类似的东西会更整洁!

(仍在寻找干净利落地派生安装目录的方法

我怀疑对于 .NET 版本,保证 .buildnumber 位在 RTM(甚至 SP)之后不会移动

请记住,Framework(vs Framework64)位也不一定是稳定的[并且正如引用的博客文章中的 cmets 所指出的,您可能需要将 Wow6432Node 考虑到注册表方面]

您实际上是在寻找 msbuild.exe 的路径,还是需要知道 .NET 4 是否存在? MSBuild 中的任何预定义符号是否有用/反映到 msbuild.exe 是否会产生任何结果?)

【讨论】:

谢谢。 Wow6432Node 有点烦人,但幸运的是我只针对 64 位系统。查看 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v4\Full 中的 InstallPath 似乎很有希望,如果这是他们正式支持它的方式(从文章中似乎如此),那将是可行的。我特别需要知道 msbuild 4 是否存在,但据我所知(仅)与 .net 4 一起提供,因此检查一个会给我另一个。 是的。不过要小心 - msbuild 不在客户端配置文件中,因此您需要检查完整 .NET 4 的密钥(您会在谷歌搜索“.net 4.0 框架目录”中找到的内容中看到该密钥 还看到了更多关于如何为环境平台检测 obv 对您没有多大用处的东西。此处未安装 FW 4,因此考虑到已完成并已除尘:D(已反映 3.5,但没有任何迹象表明托管程序集中将来会证明) Re Wow6432Node,你应该可以从***.com/questions/1074411/…得到一些简洁和合适的东西

以上是关于检测是不是从在 3.5 上运行的 C# 代码安装了 MSBuild/.net 4?的主要内容,如果未能解决你的问题,请参考以下文章

c# .NEt 3.5 以用户形式运行进程时无法隐藏 CMD 窗口 - 窗体应用程序

是否可以从在 Wine 中运行的 Windows 应用程序调用本机 Linux API?

在未安装 .Net Framework 的情况下运行 c# 3 应用程序?

c# winform 打包问题

如何检测一个进程是不是已经执行完毕

.Net Framework 4.0 安装程序是不是包含 .Net Framework 3.5?