我有一个通过控制台运行的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废话),那将是很好的。 我尝试添加清单文件并将执行级别更改为admin但这似乎不起作用或我的应用程序忽略了该文件(我不知道)。
答案 0 :(得分:2)
如果没有UAC提示,您将无法正常工作。它按设计工作。
答案 1 :(得分:0)
如果您愿意使用控制台窗口,当这部分代码短暂出现时,您可以让它在此代码段运行时向您提供UAC提示,而不是每次启动程序时。
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",
UseShellExecute = true,
startInfo.Verb = "runas";
};
Process proc = Process.Start(procInfo);
proc.WaitForExit();
没有办法这样做,所以没有UAC提示。