如何以管理员身份启动C#控制台应用程序

时间:2014-07-17 15:55:22

标签: c# wcf admin netsh

我有一个通过控制台运行的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但这似乎不起作用或我的应用程序忽略了该文件(我不知道)。

2 个答案:

答案 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提示。