我用 C# (.NET 4.6.2) 开发一个应用程序,该应用程序通过 WiX 3 的安装程序构建作为 Windows 服务安装。该服务在 Windows 启动时自动启动。
NetworkInterface.GetAllNetworkInterfaces()
加载。
有时,在运行 Windows 11 的计算机上,返回的列表为空,我无法找出原因。
我的猜测(或者更好的希望): 存在一个内置的 Windows 服务,可以执行某种网络接口初始化。在系统启动我的服务之前,该服务启动尚未完成。或者我的服务启动安排在网络服务启动之前。这两种情况都可以解释为什么返回的接口列表为空。
所以我的问题是:这样的网络服务是否存在,服务的名称是什么?
如果是这样,我也许可以直接通过 WiX 功能注册服务依赖项,而无需运行,例如调用
sc triggerinfo start/networkon
的自定义操作。但是,话虽如此,我什至不确定sc triggerinfo
是否可以解决问题。
我最终将服务的启动类型设置为手动,并通过自定义操作中的 p/invoke 添加启动触发器。
触发器的作用与
sc triggerinfo start/networkon
相同。如果在启动系统时网络接口准备就绪,我的服务就会启动。
MS 文档: https://learn.microsoft.com/en-us/windows/win32/api/winsvc/nf-winsvc-changeserviceconfig2w