我创建了一个使用WCF wsdualhttpbinding回调功能的Windows服务(服务器)和WPF(客户端)。两个软件之间的所有东西都能正常工作,但我遇到的问题是客户端需要运行升级到管理员权限才能工作(这是可以理解的,因为它必须打开端口才能与服务器通信)
有没有办法让客户端在没有高程的情况下工作?或者可能创建一次性永久连接,以便客户端不需要一直升级?
我的想法和谷歌搜索条款已经用完了。
更新
我找到了解决方案。如果还有其他最好的做法,请纠正我!
我在运行netsh以打开(或关闭)并保留端口的客户端应用程序中添加了“启用”和“禁用”按钮。
启用
Process process = new Process();
process.StartInfo = new ProcessStartInfo("netsh", @"http add urlacl url=http://+:" + PortNumber + @"/ user=DOMAIN\username");
process.StartInfo.Verb = "runas";
process.Start();
process.WaitForExit();
禁用
Process process = new Process();
process.StartInfo = new ProcessStartInfo("netsh", "http delete urlacl url=http://+:" + PortNumber + "/");
process.StartInfo.Verb = "runas";
process.Start();
process.WaitForExit();
答案 0 :(得分:1)
我找到了解决方案。如果还有其他最好的做法,请纠正我!
我在运行netsh以打开(或关闭)并保留端口的客户端应用程序中添加了“启用”和“禁用”按钮。
启用
Process process = new Process();
process.StartInfo = new ProcessStartInfo("netsh", @"http add urlacl url=http://+:" + PortNumber + @"/ user=DOMAIN\username");
process.StartInfo.Verb = "runas";
process.Start();
process.WaitForExit();
禁用
Process process = new Process();
process.StartInfo = new ProcessStartInfo("netsh", "http delete urlacl url=http://+:" + PortNumber + "/");
process.StartInfo.Verb = "runas";
process.Start();
process.WaitForExit();
答案 1 :(得分:0)
不幸的是,只有在以管理员权限运行时才能在Windows上打开端口。
http://msdn.microsoft.com/en-us/library/ms740548%28v=VS.85%29.aspx
要使用SOCK_RAW类型的套接字,需要管理权限。 运行使用原始套接字的Winsock应用程序的用户必须是a 否则,本地计算机上Administrators组的成员 原始套接字调用将失败,错误代码为WSAEACCES。在Windows上 Vista及更高版本,套接字强制访问原始套接字 创建。在早期版本的Windows中,对原始套接字的访问是 在其他套接字操作期间强制执行。
原始套接字提供了操纵底层的功能 传输,因此它们可以用于构成恶意目的 安全威胁。因此,只有Administrators组的成员 可以在Windows 2000及更高版本上创建SOCK_RAW类型的套接字。
编辑: 如果您可以作为管理员访问该计算机,则可以使用netsh http://technet.microsoft.com/en-us/library/cc725935(v=ws.10).aspx允许某些用户打开端口。
netsh http add urlacl url = http://+:80/Uri
user = DOMAIN \ User listen = yes