加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

.net – 检测代码是否作为服务运行

发布时间:2020-12-14 04:11:44 所属栏目:Windows 来源:网络整理
导读:有没有办法让.NET库检测它是否作为服务运行? 我的图书馆可以运行.但是当它作为服务运行时,开发人员需要调用另一个方法来指示事实或某些功能无法正常工作.我希望我的库处理日志记录,如果在没有调用该方法的服务中使用它,则会写一个警告. 在通过intellisense,
有没有办法让.NET库检测它是否作为服务运行?

我的图书馆可以运行.但是当它作为服务运行时,开发人员需要调用另一个方法来指示事实或某些功能无法正常工作.我希望我的库处理日志记录,如果在没有调用该方法的服务中使用它,则会写一个警告.

在通过intellisense,调试器和文档进行大量搜索之后,我们无法找到任何严格可靠的内容.有可能获取当前进程ID并尝试查明该进程是否已向SCM注册,但是.NET提供了获取所有服务集合的方法,但它们的进程ID不在可用信息中.将进程名称与服务名称进行比较是可能的,但不一定可靠.

但是,有两件事情相对容易检查,并且可能足以满足您的需求,如果不完全是“这段代码是作为服务运行的吗?”

System.Environment.UserInteractive :(正如斯蒂芬马丁所说)如果这是真的,它就不能成为一种服务.大多数非服务(也不是设备驱动程序)的进程都会说真的.某些控制台应用程序在非交互式环境(例如构建过程的一部分)中运行时可能会说错误.

System.Diagnostics.Process.GetCurrentProcess().SessionId :(我认为这与皮埃尔相同)如果不是0,则不是作为服务启动的.大多数正常的应用程序都不会在会话0中(如皮埃尔和斯蒂芬所指出的那样,有一些不那么正常的例外).最大的问题是如何在XP等旧版操作系统下运行. XP和Windows 2000显然在会话0中运行服务,但普通应用程序也将在会话0中运行. XP的某些配置(例如,不在域中)允许同时进行多个用户会话,并且它们各自获得不同的会话ID,但是第一个获得会话0.因此,在Vista之前检查不是那么有效.

因此,根据您实际需要区分的内容,这些检查中的一个或两个可能对您有用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读