Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何查找Windows服务的.NET版本?_C#_.net_Windows_C# 4.0_Service - Fatal编程技术网

C# 如何查找Windows服务的.NET版本?

C# 如何查找Windows服务的.NET版本?,c#,.net,windows,c#-4.0,service,C#,.net,Windows,C# 4.0,Service,关于找出安装了什么.NET framework,这里有很多问题我知道我已经安装了高达.NET v4.6.1的版本。 我想了解服务的.NET版本。 假设我安装了一个.NETV2.0的服务(XYZ.exe)。我对代码进行更改,生成另一个同名的可执行文件,但使用.NET v4.6.1,并替换现有的可执行文件(在停止服务后)。当我重新启动该服务时,该服务将使用新的可执行文件(.NET v4.6.1)还是具有它使用的旧可执行文件(.NET v2.0)的预加载代码?右键单击相关DLL并在属性中查找其版本。

关于找出安装了什么.NET framework,这里有很多问题我知道我已经安装了高达.NET v4.6.1的版本。

我想了解服务的.NET版本。


假设我安装了一个.NETV2.0的服务(XYZ.exe)。我对代码进行更改,生成另一个同名的可执行文件,但使用.NET v4.6.1,并替换现有的可执行文件(在停止服务后)。当我重新启动该服务时,该服务将使用新的可执行文件(.NET v4.6.1)还是具有它使用的旧可执行文件(.NET v2.0)的预加载代码?

右键单击相关DLL并在属性中查找其版本。
此外,如果您正在开发,请注意DLL可能会从GAC加载,而不是从您的DLL加载,因此我认为这就是答案。如果有人评论我会很高兴的

我们可以进入注册表,进入以下级别:

HKEY\U LOCAL\U MACHINE\SYSTEM\ControlSet001\services\eventlog\Application\

然后,我们查看key
EventMessageFile
的值,它将显示所安装服务的.NET版本

编辑:

只有使用
InstallUtil.exe
安装Windows服务时,此注册表项才会出现。但是,如果Windows服务是使用
SC.exe
安装的,则注册表项将出现在以下位置:


HKEY\U LOCAL\U MACHINE\SYSTEM\ControlSet001\services\

可执行文件将使用构建时针对的框架版本。因此,如果您在4.6.1中构建它,它将是这个版本。通过@Tim的响应,您应该看到您的app.config(exe.config)已更新,以反映支持的运行时中相应的.NET版本。不过,还有其他因素,这取决于您的代码是否真正针对具有文件路径的特定文件和库(没有,但可能)。但这是针对可执行文件的。我需要知道更改可执行文件是否会对服务使用的代码进行任何更改。我认为你没有正确解释你真正的问题。您是否担心“重启”不会从内存中卸载可执行代码?服务保留文件的缓存副本,并且不会使用您替换的文件?服务元数据是否记住.NET版本并尝试使用旧版本而不是新程序集引用的版本?你是否真的看到加载了错误的版本,或者你是在为麻烦做准备?简单明了。对于任何windows服务,如果不考虑重新启动计算机或其他什么,您如何知道该服务使用的是哪个版本的.NET?假设可执行文件定期更改,因此您不能信任可执行文件的版本。好吧,请澄清,即使我更改了可执行文件,在我对GAC进行更改之前,它也不会反映实际服务上的任何更改。这取决于-但大多数情况下,您需要将dll注册到GAC中。如果是服务-在服务中查找它所基于的dll,然后使用属性(右键单击)检查其版本-可能您会发现它仍然是2.0如果服务不在GAC上怎么办?我在GAC上的任何地方都找不到使用gacutil的服务。我错过什么了吗?也许我指的是错误的GAC。