[英]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.