You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ServiceController.ServiceName未按文档抛出InvalidOperationException的疑问

ServiceController.ServiceName抛出“服务未找到”异常的时机

首先明确:单纯设置或读取ServiceName属性本身,不会触发服务存在性检查,自然也不会抛出InvalidOperationException。你测试的两种场景(设置不存在的服务名、服务被卸载后读取ServiceName)都不会抛异常,就是因为这个原因——ServiceName本质上只是一个存储的字符串,设置和读取它不需要和系统服务管理器交互。

只有当你调用需要和实际服务进行交互的方法,或者访问依赖服务实际状态的属性时,才会触发服务存在性验证,此时如果服务不存在(或已被卸载),才会抛出“服务未找到”的InvalidOperationException。具体场景包括:

  • 调用服务控制方法:Start()、Stop()、Pause()、Continue()、Refresh()等
  • 访问服务状态/信息属性:Status、DisplayName、ServicesDependedOn、DependentServices等

举个例子,把你第二个测试的第3行改成:

var status = serviceController.Status;

当你卸载服务后继续运行,这行代码就会抛出“服务未找到”的异常——因为Status属性需要去系统服务管理器查询对应服务的状态,此时服务已不存在,验证失败触发异常。

微软文档里的描述确实存在歧义,它提到的“服务未找到时抛出异常”,并不是指设置或读取ServiceName属性的动作本身,而是指当使用该属性对应的服务进行实际交互操作时,才会触发的异常。

内容的提问来源于stack exchange,提问作者mshwf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 21:01:05