我有一個作爲本地系統運行的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;
}
}