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

本文关键字:控制台 应用程序 启动 身份 管理员 | 更新日期: 2023-09-27 18:13:19

我有一个通过控制台运行的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();

如果我可以启动应用程序而不提示用户以admin身份启动(UAC废话),那就太好了。我尝试添加清单文件并将执行级别更改为admin,但这似乎不起作用,或者我的应用程序忽略了该文件(我不知道)。

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

如果没有UAC提示,您将无法获得此工作。一切正常

如果你愿意在这段代码出现时出现一个控制台窗口,你可以让它在这段代码运行时给你一个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提示发生