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

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

5 ответов

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

Process[] Prs = Process.GetProcessesById(RunninExe);
if (Prs.Length > 0)
{
      foreach (Process Prss in Prs)
      {
          Prss.Kill();
      }
}

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

Проект кода делает именно то, что вы ищете. Я нашел этот класс очень полезным в процессах 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();
    }

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

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

Метод Process.Kill

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам