我有一个C#Windows窗体程序,它运行自托管api。 我目前必须手动运行命令
http add urlacl url=http://*:8888/ user=Users listen=yes
在管理员cmd提示符中。
我想在程序运行时自动添加它。 我找到了几个答案,只是指向HttpSetServiceConfiguration函数MS文档但不幸的是 没有示例代码行显示如何以c#运行此命令。
此外,我还想以编程方式添加防火墙端口,这也需要手动运行,即
netsh advfirewall firewall add rule name="my local server" dir=in action=allow protocol=TCP localport=8888
如果有人能指出我正确的方向,我将不胜感激。
答案 0 :(得分:0)
您可以使用带有“runas”动词的System.Diagnostics.ProcessStartInfo以管理员身份运行外部程序。如果启用了用户访问控制(UAC),则Windows可能会停止执行程序,同时询问用户是否应允许该操作。如果当前用户没有管理员权限,则他们必须在允许操作之前向管理员帐户提供帐户凭据,此时您尝试执行的程序将恢复。
以管理员身份启动流程的代码如下所示:
using System;
using System.IO;
using System.Diagnostics;
...
static void DoNetshStuff() {
// get full path to netsh.exe command
var netsh = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.System),
"netsh.exe");
// prepare to launch netsh.exe process
var startInfo = new ProcessStartInfo(netsh);
startInfo.Arguments = "http add urlacl url=http://*:8888/ user=Users listen=yes";
startInfo.UseShellExecute = true;
startInfo.Verb = "runas";
try
{
var process = Process.Start(startInfo);
process.WaitForExit();
}
catch(FileNotFoundException)
{
// netsh.exe was missing?
}
catch(Win32Exception)
{
// user may have aborted the action, or doesn't have access
}
}