【发布时间】:2014-07-18 00:02:32
【问题描述】:
我有一个通过控制台运行的 wcf Web 服务。如果我以管理员身份启动服务,即右键单击可执行文件并以管理员身份运行,那么它可以工作,但如果我只是打开它,它会抱怨并说“http 无法注册 url http //+ 80/ ......”。 或者,我可以在我的 c# 代码中运行 netsh 并添加 URL(我想),但这也需要管理员权限。 我试过:这段代码,GetIP()获取ip地址v4的字符串文字
ProcessStartInfo procInfo = new ProcessStartInfo
{
WorkingDirectory = Path.GetPathRoot(Environment.SystemDirectory),
FileName = Path.Combine(Environment.SystemDirectory, "netsh.exe"),
Arguments = "netsh http add urlacl url=http://" + GetIP() + ":80/VSPDataLogger/ user=everyone",
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden
};
Process proc = Process.Start(procInfo);
proc.WaitForExit();
如果我可以在不提示用户以管理员身份启动的情况下启动应用程序(UAC 废话),那就太好了。 我尝试添加清单文件并将执行级别更改为管理员,但这似乎不起作用,或者我的应用程序忽略了该文件(我不知道)。
【问题讨论】:
-
如果您作为程序员可以在没有 UAC 的情况下获得管理员权限,那么恶意软件编写者不会也这样做吗?
-
UAC 的全部意义在于要求特权。如果您不希望用户收到提示,则需要告诉他们关闭 UAC。虽然您可能认为这是无稽之谈,但它提供了一种处理权限提升的有效方法,通常不应关闭。
-
您可能无法绕过 UAC,但您可以右键单击应用程序的图标,转到属性 > 快捷方式 > 高级并选择“以管理员身份运行”。它至少会确保人们在正确的模式下使用它,并且当他们没有正确使用它时不会责怪你:)。抱歉,它有点点头,但它有效。
-
@Hockey 这就是清单的用途,请参阅How to force my .NET App to run as administrator on Windows 7?。