программно уничтожьте процесс в перспективе/окнах 7 в C#

Компаратор - хорошая вещь. Он имеет static > Comparator comparing(Function keyExtractor) для этой конкретной проблемы. В вашем случае это было бы

listOfNeighbours.sort(Comparator.comparing(Vertex::getElement))

Если ваш компонент Vertex не Comparable, я бы предложил вместо этого static Comparator comparing(Function keyExtractor, Comparator keyComparator) , который можно подавать с помощью специального компаратора. [ 1118]

Например,

import java.util.*;
import javafx.beans.property.*;

public class Vertex{

  private ObjectProperty element;
  private BooleanProperty visited;

  public Vertex() {
      element = null;
      visited = new SimpleBooleanProperty(false);
  }

  public Vertex(T element) {
      this.element = new SimpleObjectProperty(element);
      this.visited = new SimpleBooleanProperty(false);
  }

  public Vertex(T element, boolean visited) {
      this.element = new SimpleObjectProperty(element);
      this.visited = new SimpleBooleanProperty(visited);
  }

  public void setElement(T elem) {
      this.element.set(elem);
  }

  public T getElement() {
      return this.element.get();
  }

  public ObjectProperty elementProperty(){
      return this.element;
  }

  public void setVisited(boolean b) {
      this.visited.set(b);
  }

  public boolean isVisited() {
      return this.visited.get();
  }

  public BooleanProperty visitedProperty(){
      return this.visited;
  }

  @Override
  public boolean equals(Object o) {
      if(o == this) {
          return true;
      }

      if(!(o instanceof Vertex)) {
          return false;
      }

      Vertex v=  (Vertex) o;

      if(v.getElement() instanceof String) {
          return v.getElement().equals(this.element.get());
      }else {
          return v.getElement() == this.element.get();
      }


  }

  @Override
  public String toString() {
      return element.get().toString();
  }

  public static void main(String[] args) {
    ArrayList> listOfNeighbours = new ArrayList<>();
    listOfNeighbours.add(new Vertex<>("foo"));
    listOfNeighbours.add(new Vertex<>("bar"));
    System.out.println(listOfNeighbours);
    listOfNeighbours.sort(Comparator.comparing(Vertex::getElement));
    System.out.println(listOfNeighbours);

    ArrayList> list2 = new ArrayList<>();
    list2.add(new Vertex<>(1));
    list2.add(new Vertex<>(123));
    list2.add(new Vertex<>(15));
    list2.add(new Vertex<>(2));
    System.out.println(list2);
    list2.sort(Comparator.comparing(Vertex::getElement));
    System.out.println(list2);
    list2.sort(Comparator.comparing(Vertex::getElement, Comparator.comparing(i -> i.toString())));
    System.out.println(list2);
  }
}

будет, как это можно сделать (протестировано с https://www.compilejava.net/ ).

Результаты:

[foo, bar]

(исходный ввод)

[bar, foo]

(отсортировано по строке)

[1, 123, 15, 2]

(исходный ввод)

[ 115]

(отсортировано по натуральному целочисленному порядку)

[1, 123, 15, 2]

(отсортировано по порядку, заданному для строки, то есть лексикографически).

Последнее выполняется с помощью Comparator>, который выполняет свою работу, извлекая значение из заданного Vertex, а затем преобразовывая его в String, который затем используется в качестве ключа сортировки.

9
задан mmr 13 February 2009 в 04:13
поделиться

2 ответа

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

В Вашем приложении форм окон:

private enum SimpleServiceCustomCommands { KillProcess = 128 };

ServiceControllerPermission scp = new ServiceControllerPermission(ServiceControllerPermissionAccess.Control, Environment.MachineName, "SERVICE_NAME");
scp.Assert();
System.ServiceProcess.ServiceController serviceCon = new System.ServiceProcess.ServiceController("SERVICE_NAME", Environment.MachineName);
serviceCon.ExecuteCommand((int)SimpleServiceCustomCommands.KillProcess);

myProcess = System.Diagnostics.Process.Start(psi);

В Вашем сервисе:

private enum SimpleServiceCustomCommands { KillProcess = 128 };

protected override void OnCustomCommand(int command)
{
    switch (command)
    {
        case (int)SimpleServiceCustomCommands.KillProcess:
            if(killProcess)
            {
                System.Diagnostics.Process[] process = System.Diagnostics.Process.GetProcessesByName("MyProcessName");
                // Before starting the new process make sure no other MyProcessName is running.
                foreach (System.Diagnostics.Process p in process)
                {
                    p.Kill();
                }
            }
            break;
        default:
            break;
    }
}
4
ответ дан 5 December 2019 в 01:19
поделиться

Я добавлю код для предложения Simon Buchan. Это имеет смысл и должно работать также, принятие Вашей формы окон - то, что запустило процесс во-первых.

Вот то, где Вы создаете процесс. Заметьте переменную myProc. Это - Ваш дескриптор на нем:

System.Diagnostics.Process myProc = new System.Diagnostics.Process();
myProc.EnableRaisingEvents=false;
myProc.StartInfo.FileName="PATH_TO_EXE";
myProc.Start();

Позже, просто уничтожьте его с:

myProc.Kill();
0
ответ дан 5 December 2019 в 01:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: