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

使用NSSM部署的.NET Core Windows服务无法访问摄像头

问题核心根因

  • Windows.Media.Capture是WinRT生态下的媒体捕获API,内置的摄像头权限校验逻辑仅支持运行在**交互式用户登录会话(Session 1及以上)**的进程,对无窗口、运行在Session 0隔离会话的系统服务进程,会直接抛出UnauthorizedAccessException,无配置可绕过这个底层校验逻辑。
  • NSSM部署的Windows服务默认运行在Session 0系统隔离会话下,这个会话的进程不会被纳入系统摄像头隐私授权的统计范围,因此无论调整摄像头隐私开关、修改对应注册表项、配置组策略,都无法让权限校验通过。
  • 直接运行exe时功能正常,是因为该进程启动在你当前登录的交互式用户会话中,满足WinRT API的授权校验前置要求。

可落地解决方向

  • 停止尝试为Session 0下的服务进程配置摄像头权限,这类操作从设计层面就不具备生效的可能
  • 方案1:如果必须保留现有Windows.Media.Capture的实现,调整NSSM的运行配置,将服务绑定到当前已登录用户的会话启动进程,关闭Session 0隔离。注意该配置在Windows 10 1809及以上版本中已被系统逐步限制,稳定性较差
  • 方案2:替换采集层实现,使用兼容无交互会话的采集接口替代Windows.Media.Capture:比如基于OpenCVSharp、DirectShow的封装实现,这类接口直接对接摄像头驱动层,不依赖WinRT的隐私授权校验,在Session 0下可正常初始化摄像头采集
  • 方案3:拆分进程架构,将摄像头采集模块独立为常驻在用户交互式会话下的轻量进程,原后台服务仅负责业务逻辑处理,通过本地命名管道、本地Socket等IPC方式与采集进程通信,传递视频流数据。该方案是长期运行场景下最稳定的实现,不受系统版本迭代的权限规则调整影响

之前做的隐私设置调整、注册表修改、组策略配置,本质都是修改交互式会话应用的摄像头授权规则,对Session 0下的无交互进程完全不产生作用,因此无法解决问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 06:06:10