我正在用 C for Windows 编写一个类似服务器的小型程序(使用 MinGW/GCC,在 Windows 7 上进行测试),最终应该使用 LocalSystem 帐户作为服务运行。我正在创建一个套接字,并使用 Windows Socketsbind()
并listen()
监听accept()
传入的连接。如果我从命令行运行应用程序(即不是作为服务,而是作为普通用户),我从外部 IP 连接到它没有问题。但是,如果我使用 LocalSystem 帐户将程序作为服务运行,我只能从我自己的 PC 连接到该服务,无论是使用127.0.0.1
本地地址还是本地地址,192.168.1.80
(我在一个小型本地网络中的路由器后面)。使用我的本地地址,外部 IP 和同一本地网络中的其他 PC 现在都无法连接,即使没有作为服务运行没有问题。
现在,我听说当作为 LocalSystem 或 LocalService 运行时,网络的处理方式不同甚至无法访问(?),或者服务无法同时访问桌面和网络(注意:我的服务不是交互式的),因为安全考虑。本质上,我需要找出问题所在/如何监听服务中的连接。作为 NetworkService 运行是否与作为 LocalSystem 运行相同,但具有网络访问权限?肯定有服务器可以作为后台服务运行,那么它们是怎么做的呢?
更新:关闭防火墙的建议似乎在正确的轨道上——我可以在 Windows 防火墙中添加例外后获得连接。我想我并没有考虑防火墙,因为当您正常使用套接字运行应用程序时,您会收到一个提示,要求添加一个异常,这在第一次运行服务时不会发生。有没有比手动将规则添加到防火墙更好的方法来处理这个问题?LocalSystem 是否有权向防火墙本身添加规则,或者我必须在安装过程中以某种方式执行此操作?