繁体   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