我正在尝试使用以下代码运行cmd命令:
ProcessStartInfo cmd = new ProcessStartInfo("cmd.exe"); cmd.RedirectStandardInput = true; cmd.RedirectStandardOutput = true; cmd.RedirectStandardError = true; cmd.UseShellExecute = false; cmd.CreateNoWindow = true; cmd.WindowStyle = ProcessWindowStyle.Hidden; Process exec = Process.Start(cmd); exec.StandardInput.WriteLine("sc create \"BaliService\" binPath= \"{0}\\BaliService.exe\"", Directory.GetCurrentDirectory());
此命令需要管理员特权,如果我以管理员身份运行cmd并键入命令,则该命令可以正常运行,但是当我以管理员身份运行此应用程序时,此命令无法正常运行。我已经添加了
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
到清单文件,该文件每次打开exe时都会提示uac。
我已经看到了多个问题,它们似乎都暗示在提升的应用程序下运行的任何进程都将具有相同的权限,但这对我不起作用。
我尝试过cmd.Verb = "runas";但没有骰子。
cmd.Verb = "runas";
您需要将其设置UseShellExecute为true,Verb并且必须将其设置为“ false”以重定向标准输出。你不能两者都做。
UseShellExecute
true
Verb
我很确定Windows也不允许您跨管理员/非管理员安全边界重定向标准输入/输出/错误。您必须找到其他方法来从以admin身份运行的程序中获取输出。
我没有阅读这篇文章,但这可能会给您更多信息:http : //www.codeproject.com/KB/vista- security/UAC__The_Definitive_Guide.aspx