Windows服务是否需要.Net Runtime?

3

我正在用C#.net创建一个Windows服务,并想将其部署到没有.NET运行时的系统中。
我的问题是,如果没有.NET运行时,这个服务能否正常工作?如果不能,那么它如何在没有运行时的情况下工作?


是的,它需要运行时。 - stuartd
3个回答

8
一个Windows服务只是一个可执行文件,它可以响应来自服务控制管理器的某些调用。
因此,如果您编写服务可执行文件以在.NET上运行,则运行服务的计算机必须安装.NET运行时。
避免必须安装或嵌入/自托管.NET运行时的唯一选择就是不使用.NET。

2
@Co.Aden:你确定它们是在 .net 框架下开发的吗?(我真的很怀疑) - Rahul Tripathi
2
没有安装(相关的).Net Framework,是不可能运行 .net 可执行文件的。ILMerge 合并程序集,但它不合并运行时。NGen 绕过了即时编译器,但你仍然需要运行时。你可以做这两件事情,_但你仍然需要运行时_。 - Binary Worrier
1
@BinaryWorrier 我没有提到ILMerge或NGen。最终,CLR只是一个运行字节码的Win32应用程序。您可以创建一个包含运行时和应用程序字节码的可执行文件,因此您无需安装.NET即可运行该可执行文件。请参见[.NET Native](https://dev59.com/GmAh5IYBdhLWcg3wBfeM)(不是NGen),或[阅读有关嵌入运行时的信息](http://stackoverflow.com/questions/270533/)。在这两种情况下,您仍然需要框架库,您可以将其静态链接到可执行文件中。 - CodeCaster
1
@BinaryWorrier 我不是在谈论可行性或可能的许可问题(也不是在问你是否真的想要),但是肯定可以在没有单独安装运行时的情况下运行.NET应用程序。不过,你不能对于_任何_ .NET应用程序都这样做;应用程序本身将必须包含一个运行时(或通过主机启动)和相关的框架程序集。 - CodeCaster
1
@BinaryWorrier,".NET可执行文件"并没有太多特别之处。 .NET可执行文件被编译成[Win32 / PE可执行文件,基本上要求安装的CLR运行包含在可执行文件中的字节码](http://en.wikipedia.org/wiki/Portable_Executable#.NET.2C_metadata.2C_and_the_PE_format)。嵌入或自托管运行时时替换的是_那个_部分。 - CodeCaster
显示剩余5条评论

3

您需要使用.Net运行时环境。否则,您将不得不使用c++(非托管c++)从头开始编写代码。


1

是的,您需要安装.Net框架,因为在.Net Windows服务中使用的库和引用可能需要该框架。

如果没有安装运行时环境,它如何工作?

您需要在系统上安装.Net框架,否则无法在系统上使用Windows服务。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接