如何以管理员身份启动C#控制台应用程序
我有一个通过控制台运行的wcf web服务。如果我以管理员的身份启动服务,即右键单击可执行文件并以管理员的身份运行,则服务可以运行,但如果我只是打开它,它会抱怨并说“http无法注册url http/+80/…”。 或者,我可以在我的c#代码中运行netsh并添加URL(我想),但这也需要管理员权限。 我尝试过:这段代码,GetIP()获取ip地址v4的字符串文本如何以管理员身份启动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
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服务的机会也会解决您的问题?谢谢,我想我必须这样做#叹息