Próbuję uruchomić polecenie cmd z następującego kodu:Run podwyższone proces
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());
To polecenie wymaga administratora privelages, jeśli biegnę cmd jako administrator i wpisz polecenie działa idealnie, ale nie wtedy, gdy biegnę ta aplikacja jako administrator. Dodałem
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
do pliku manifestu, który skłania UAC każdym razem, kiedy otworzyć exe.
Widziałem wiele pytań na ten temat i wszystkie zdają się sugerować, że wszelkie procesy prowadzone w podwyższonej aplikacji będą miały te same prawa, ale to nie działa dla mnie.
Próbowałem cmd.Verb = "runas";
, ale nie kości.
Spróbuj zmienić 'cmd.UseShellExecute' do' true' i zachować 'runas' czasownika. – keyboardP
Próbowałem go, ale dostałem ten błąd 'Obiekt procesu musi mieć właściwość UseShellExecute ustawioną na wartość false w celu przekierowania strumieni IO. Dzięki. –
To tam zatrzymuje się, nie można mieć dwóch sposobów. Kontrola UAC zapobiega niealternowanemu procesowi od podniesienia możliwości podwyższonego poziomu. Jedynym sposobem przekierowania jest podniesienie się w pierwszej kolejności. –