как убить процесс в Windows-CE? - PullRequest
       12

как убить процесс в Windows-CE?

4 голосов
/ 05 сентября 2011

Как убить процесс Windows \ MyProcc.exe из моего терминала (Windows-CE 5.0) с помощью кода C #?

Ответы [ 5 ]

4 голосов
/ 05 сентября 2011

Сначала найдите процесс, дав ему имя запущенного exe и убейте его.Используйте пространство имен System.Diagnostics.

Process[] Prs = Process.GetProcessesById(RunninExe);
if (Prs.Length > 0)
{
      foreach (Process Prss in Prs)
      {
          Prss.Kill();
      }
}
4 голосов
/ 05 сентября 2011

Ответ заключается в том, что вы должны использовать API-интерфейсы панели инструментов. На MSDN есть полный пример, который включает перечисление процессов и уничтожение выбранного.

3 голосов
/ 13 мая 2013

Кодовый проект делает именно то, что вы ищете. Я нашел этот класс очень полезным в процессах Killing в CE.

http://www.codeproject.com/Articles/36841/Compact-Framework-Process-class-that-supports-full

    ProcessInfo[] list = ProcessCE.GetProcesses();

    foreach (ProcessInfo pinfo in list)
    {
        if (pinfo.FullPath.EndsWith("MyExe.exe"))
            pinfo.Kill();
    }
1 голос
/ 05 сентября 2011

Как только вы нашли свой процесс, вы можете вызвать команду Kill.

он в System.Diagnostics и поддерживается в .NET Compact Framework, см. Здесь:

Process.Kill Method

К сожалению, похоже, что Process.GetProcess не работает в .NET CF, поэтому вы должны использовать другой способ, чтобы найти свой процесс перед его уничтожением, также есть статьи об этом:

Compact Framework Класс процесса, поддерживающий полностью указанные пути к файлам

0 голосов
/ 18 августа 2016

Несмотря на то, что в Compact Framework нет встроенного способа составления списка всех процессов, все же легко управлять созданными вами процессами.

Когда вы используете Process.Start (имя, аргументы) , вы получаете только логическое значение. Это связано с тем, что эта функция является общей функцией, которая предназначена для использования при создании процесса, а затем не заботится о нем. Он просто говорит, создал ли он его или нет.

Что вам действительно нужно, так это получить копию дескриптора процесса при запуске исполняемого файла, а это означает, что вам нужно создать новый экземпляр из Process и затем использовать методы в этом случае, чтобы запустить ваш исполняемый файл.

Итак, создайте новый экземпляр Процесс - назовите его P . Теперь это фактически дескриптор процесса, но он еще не связан с процессом.

Вы обнаружите, что P предоставляет гораздо больше атрибутов.

Установите имя исполняемого файла и аргументы (если они есть) в P.StartInfo.FileName и P.StartInfo.Arguments а теперь позвони P.Start ()

Если он возвращает True, это помещает идентификатор процесса в P.Id для вас и поддерживает прямую ссылку на ваш процесс.

Значения в P.Responding P.HasExited и P.ExitCode сообщают, работает ли он по-прежнему и, если нет, как он закончился, и Вы можете использовать функцию без параметров P.Kill () , чтобы завершить ее, когда вам это надоело, потому что она завершает процесс, связанный с дескриптором.

Просто создайте новый экземпляр Процесс для каждого процесса, которым вы хотите управлять, запустите его с помощью переменной создания экземпляра, а не общей общей функции Process.Start () и сохраните это как ваша ссылка на процесс.

Если вы сохраняете только значение P.Id , вы все равно можете использовать общую функцию Process.Kill (Id) , чтобы завершить его, и вы можете использовать Process .GetProcessById () , чтобы получить ссылку на экземпляр дескриптора, который ссылается на него.

Это должно работать на любом языке.

Структура Process также содержит нечто, называемое MainWindowHandle , которое выглядит как дескриптор задачи создания. Я никогда не проверял, соответствует ли он, но он заполняется.

Итак, если вы хотите уничтожить «Windows \ MyProcc.exe», это легко, при условии, что это действительно «ваш процесс», потому что вы можете создать его таким способом, который возвращает вам его Id и дескриптор.

Если «Windows \ MyProcc.exe» действительно «Windows \ Someone-elses-Procc.exe», то это не так просто, потому что вам нужно знать Id, и нет простого способа получить его, если он не ваш.

Надеюсь, это поможет.

...