Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何以管理员身份启动C#控制台应用程序_C#_Wcf_Admin_Netsh - Fatal编程技术网

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

如何以管理员身份启动C#控制台应用程序,c#,wcf,admin,netsh,C#,Wcf,Admin,Netsh,我有一个通过控制台运行的wcf web服务。如果我以管理员的身份启动服务,即右键单击可执行文件并以管理员的身份运行,则服务可以运行,但如果我只是打开它,它会抱怨并说“http无法注册url http/+80/…”。 或者,我可以在我的c#代码中运行netsh并添加URL(我想),但这也需要管理员权限。 我尝试过:这段代码,GetIP()获取ip地址v4的字符串文本 ProcessStartInfo procInfo = new ProcessStartInfo { WorkingDire

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

如果没有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提示。

如果作为程序员,您可以在没有UAC的情况下获得管理员权限,那么恶意软件编写者不会也这样做吗?UAC的全部目的就是要求特权。如果您不希望用户收到提示,则需要告诉他们关闭UAC。虽然您可能认为这是胡说八道,但它提供了处理权限提升的有效方法,通常不应关闭。您可能无法绕过UAC,但您可以右键单击应用程序的图标,转到属性>快捷方式>高级,然后选择“以管理员身份运行”。它至少可以确保人们以正确的方式使用它,并且不会因为他们没有正确使用它而责怪你:)。很抱歉,这有点麻烦,但很有效。@Hockey这就是清单的目的,请参阅。另外,如果您没有恶意意图,那么让用户安装WCF服务的机会也会解决您的问题?谢谢,我想我必须这样做#叹息