2011-09-20 73 views
0

我有一個作爲本地系統運行的windows service application,我希望能夠使用NATUPNPLib爲它需要的(多個和動態)端口創建端口轉發。我一直在試驗variousother UPnP庫全部失敗,這就是爲什麼當我測試NATUPNPLib並在我的測試應用程序中工作時,我非常興奮。NATUPNPLib作爲本地系統服務

將相同的代碼放入我在本地系統帳戶下運行的服務時出現問題。我總是得到錯誤The owner of the PerUser subscription is not logged on to the system specified (Exception from HRESULT: 0x80040210)。接下來沒有關於這個庫或這些錯誤的文檔(事實上,你需要在VS2008中生成.NET 3.5的互操作,因爲VS2010總是會錯誤的)。我從錯誤中收集到的是本地系統用戶無權訪問UPnP。

更改服務運行的用戶帳戶非常平常,除了應用程序是自動更新並且設計爲只需極少配置的事實。

有沒有人有NATUPNPLib在本地系統下工作或找到一個像樣的UPnP庫,我可以在C#中使用?

這是我使用的代碼,真的不能簡單得多!

/// <summary> 
    /// Use NATUPNPLib to try and open a port forward 
    /// </summary> 
    /// <param name="intPortNumber">The port to open</param> 
    /// <param name="strFriendlyName">Friendly name for the service</param> 
    /// <returns>Boolean indicating whether the forward worked</returns> 
    public static bool OpenUPnP(int intPortNumber, string strFriendlyName) 
    { 
     try { 
      NATUPNPLib.UPnPNATClass upnpnat = new NATUPNPLib.UPnPNATClass(); 
      upnpnat.StaticPortMappingCollection.Add(intPortNumber, "TCP", intPortNumber, GetListenIP().ToString(), true, strFriendlyName); 

      Database.AddLog("Opened port " + intPortNumber + " for " + strFriendlyName, "networking"); 
      return true; 
     } 
     catch(Exception e) { 
      Database.AddLog("Unable foward port " + intPortNumber + " for " + strFriendlyName + ": Exception - " + e.Message, "networking", "warn"); 
      return false; 
     } 
    } 

這是Networking.cs

回答

0

原來的一部分,這更多的是對BT的本地集線器3.實施的UPnP通過擴展安全性的問題,它在返回此虛假錯誤代碼NATUPnPLib沒有它它仍然在某些端口上出錯。

只要你的路由器不是一堆便便,你可以在本地系統下運行UPnP命令。

相關問題