簡體   English   中英

來自服務的NATUPNPLib作為本地系統

[英]NATUPNPLib from a service as Local System

我有一個作為本地系統運行的Windows服務應用程序 ,我希望能夠使用NATUPNPLib為所需的(多個和動態)端口創建端口轉發。 我一直在嘗試用各種 其他的UPnP庫,所有的失敗,這就是為什么當我測試NATUPNPLib,它在我的測試應用程序的工作,我非常興奮。

當將相同的代碼放入在本地系統帳戶下運行的我的服務中時,就會出現問題。 我總是收到錯誤消息The owner of the PerUser subscription is not logged on to the system specified (Exception from HRESULT: 0x80040210) 此庫幾乎沒有文檔,也沒有這些錯誤(實際上,您需要在VS2008 for .NET 3.5中生成互操作,因為VS2010總是會出錯)。 我從錯誤本身中收集的信息是,本地系統用戶無權訪問UPnP。

更改用戶帳戶后,該服務將像平常一樣運行,除了該應用程序是自動更新的,而且只需很少的配置即可。

有沒有人讓NATUPNPLib在本地系統下工作或找到了我可以在C#中使用的不錯的UPnP庫?

這是我正在使用的代碼,真的比這簡單得多!

    /// <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的一部分

事實證明,這更多是在BT的Home Hub 3上實現UPnP的問題。隨着擴展的安全性,該虛假的錯誤代碼將返回到NATUPnPLib,如果沒有,它在某些端口上仍然會出錯。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM