我正在使用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也無法連接。Windows服務:在以LocalSystem身份運行時偵聽套接字
現在,我聽說在以LocalSystem或LocalService運行時,網絡處理方式不同或甚至無法訪問(?),或者服務無法訪問桌面和網絡(請注意:我的服務不是交互式)同時出於安全考慮。本質上,我需要找出發生了什麼問題/如何監聽服務中的連接。 NetworkService與LocalSystem一樣運行,但具有網絡訪問權限?當然,必須有可以作爲後臺服務運行的服務器,那麼他們如何做到這一點?
UPDATE:看來,建議關閉防火牆在正確的軌道上–我可以加入Windows防火牆的例外後的連接。我想我沒有考慮防火牆,因爲當你通常使用套接字運行應用程序時,會得到一個提示,要求添加一個異常,這在第一次運行服務時不會發生。手動添加規則到防火牆有沒有更好的方法來處理這個問題? LocalSystem是否有權限將規則添加到防火牆本身,或者在安裝過程中是否必須執行此操作?
我認爲防火牆是一個更可能的罪魁禍首,試圖把它關閉? –