Soc*_*cob 3 c winapi windows-services network-programming winsock
我正在C for Windows中编写一个类似服务器的小程序(使用MinGW/GCC,在Windows 7上进行测试),该程序最终应该作为LocalSystem帐户的服务运行.我正在创建一个套接字,并使用Windows套接字bind(),listen()并accept()侦听传入的连接.如果我从命令行运行应用程序(即不是作为服务,而是作为普通用户),我从外部IP连接到它是没有问题的.但是,如果我将程序作为具有LocalSystem帐户的服务运行,我只能通过我自己的PC连接到该服务,或者使用127.0.0.1我的本地地址192.168.1.80(我在一个小型本地网络中的路由器后面).使用我的本地地址,同一本地网络中的外部IP和其他PC都不能立即连接,即使没有作为服务运行也没有问题.
现在,我听说当作为LocalSystem或LocalService运行时,网络处理方式不同甚至无法访问(?),或者服务无法同时访问桌面和网络(注意:我的服务不是交互式的)安全考虑.从本质上讲,我需要找出出错的原因/如何在服务中监听连接.作为NetworkService运行与运行LocalSystem相同,但具有网络访问权限?当然必须有可以作为后台服务运行的服务器,那么他们如何做呢?
更新:似乎关闭防火墙的建议是在正确的轨道上 - 我可以在Windows防火墙中添加例外后获得连接.我想我没有考虑防火墙,因为当你正常使用套接字运行一个应用程序时,你会得到一个提示,要求添加一个异常,这在第一次运行服务时不会发生.除了手动将规则添加到防火墙之外,还有更好的方法来处理此问题吗?LocalSystem是否有权将规则添加到防火墙本身,还是我必须在安装过程中以某种方式执行此操作?
LocalSystem和LocalService帐户具有受限的网络登录权限,但据我所知,它不应该影响套接字连接.
但是,Windows防火墙将处于活动状态,如果您将可执行文件移动到新目录以作为服务进行安装,则它可能不再符合您为测试所做的规则.