Процесс убийства в качестве администратора через другой процесс - PullRequest
1 голос
/ 07 ноября 2019

Я пытаюсь убить некоторые процессы по их именам (конкретные имена, которые я уже знаю) в C #. Я нахожу их и убиваю их с помощью Process.Kill(), но иногда в некоторых процессах я получаю «доступ запрещен». Я предполагаю, что это потому, что я не управляю ими как администратор. Я создал пакет, который делает то же самое, и если я запускаю его как администратор, он убивает их всех, иначе нет. Я могу запустить пакет как администратор с помощью кода c #, например:

var psi = new ProcessStartInfo();
psi.Verb = "runas"; //This suppose to run the command as administrator
//Then run a process with this psi

Мой вопрос: действительно ли это способ решить проблему доступа? Есть ли способ лучше? Если я запускаю свой код C # от имени администратора, Process.Kill() предполагает ли тот же результат, что и при работе с командным файлом?

1 Ответ

0 голосов
/ 07 ноября 2019

Вы говорите о правах с повышенными правами.

Вам нужна программа, которая находит программы и отправляет убийства, чтобы всегда запускать Elevated. Самый надежный способ сделать это - добавить это требование в Programm Manifest . Это то, что UAC прочитает, чтобы помочь вам.

Второй самый надежный способ - проверить, получили ли вы права. А если нет, то программа пытается (пере) запустить себя с повышенными правами. Некоторое время назад я написал пример кода для этого:

using System;
using System.Diagnostics;
using System.IO;

namespace RunAsAdmin
{
    class Program
    {
        static void Main(string[] args)
        {
            /*Note: Running a batch file (.bat) or similar script file as admin
            Requires starting the interpreter as admin and handing it the file as Parameter 
            See documentation of Interpreting Programm for details */

            //Just getting the Absolute Path for Notepad
            string windir = Environment.GetFolderPath(Environment.SpecialFolder.Windows);
            string FullPath = Path.Combine(windir, @"system32\notepad.exe");

            //The real work part
            //This is the programm to run
            ProcessStartInfo startInfo = new ProcessStartInfo(FullPath);
            //This tells it should run Elevated
            startInfo.Verb = "runas";
            //And that gives the order
            //From here on it should be 100% identical to the Run Dialog (Windows+R), except for the part with the Elevation
            System.Diagnostics.Process.Start(startInfo);
        }
    }
}

Обратите внимание, что независимо от того, как вы пытаетесь подняться, Eleveation может дать сбой в очень редких настройках ОС.

...