与其说这个问题与编程有关,不如说它与部署有关。
我发现自己与公司里的一个小组交谈了很多,他们的工作是维护我们的生产 Windows 服务器并在其上部署我们的代码。由于法律和法规遵循的原因,我没有直接的可见性或对服务器的任何控制,所以我可以告诉哪个版本(s)的。NET 是安装在任何一个是通过指示,我给该组。
到目前为止,我能想到的所有判断安装了哪个版本的方法(检查匹配1.1或2.0的管理工具,检查“添加/删除程序”列表中的条目,检查 c: Windows Microsoft.NET 下是否存在目录)都是有缺陷的(我见过至少有一台机器在管理工具下安装了2.0但没有2.0条目——这个方法没有告诉你关于3.0 + 的任何信息,“添加/删除程序”列表可能与现实不同步,目录的存在并不一定意味着什么)。
考虑到我通常需要提前知道这些东西已经到位(发现“哎呀,这个版本没有你需要的所有版本和服务包”在短维护窗口中并不能很好地工作) ,而且我不得不通过代理进行检查,因为我不能直接登录服务器,那么什么是最简单的方法来判断哪个版本的。NET 是否安装在生产 Windows 服务器上?最好是使用框架安装的内部方法,因为它会更快,不需要加载某种实用程序,而且如果框架没有正确安装,但仍然有文件到位(例如,有一个目录和 gacutil.exe 的内嵌,但该版本的框架并没有真正“安装”) ,这种方法肯定会失败
编辑: 在没有一个内置在框架中的简单易用的方法的情况下,有人知道一个好的、轻量级的、不需要安装的程序可以找出这个问题吗?我可以想象有人可以很容易地写一个,但如果一个已经存在,那将是更好的。