2013-06-28 4 views
3

Я работаю над настольным приложением на базе Java. Одно из требований заключается в том, что если приложение запущено, и пользователь пытается запустить приложение снова, он должен сделать что-то вроде показа какого-то предупреждения и т. Д.Проверьте, работает ли настольное приложение

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

Я сделал несколько R & D и обнаружил, что могу читать список диспетчера задач Windows, а затем я могу получить и проверить свое приложение, если оно работает. он работал нормально, но во время тестирования у меня возникла проблема i-e, есть программное обеспечение/утилита в окнах с именем «tasklist», перейдите в «start -> run» и введите tasklist, и он отобразит список задач. если эта утилита не установлена ​​в вашей системе или по какой-то причине не была повреждена или повреждена, то это не сработает, и возникнет такая же проблема, что пользователь может запустить приложение более одного раза. Вот код для доступа к элементам Taskmanager

Process p = Runtime.getRuntime().exec(
       System.getenv("windir") + "/system32/" + "tasklist.exe"); 

BufferedReader input = new BufferedReader(new InputStreamReader(
       p.getInputStream())); 
while ((line = input.readLine()) != null) { 
/* 
Make the comparison here and show alert. 
*/ 

}

Вопрос: Что такое хороший способ проверить, если приложение уже работает? Я использую Java для приложения и расширенный установщик для создания установщика приложения.

+1

дубликат? http://stackoverflow.com/questions/660205/start-program-if-not-already-running-in-java – FaddishWorm

+0

Eclipse имеет дело с файлом .lock, а обратная обратная связь - это то, что у вас есть на опыте. «Рабочий стол» не означает Windows, вы бы реализовали для Linux, Maxosx и т. Д.? –

+0

Я открою файл FileInputStream в файле ** lock **. Если open не удалось запустить приложение. В противном случае это не так. – johnchen902

ответ

5

запустить приложение. с Java Web Start и используйте SingleInstanceService. См. Код примера demo. of the SingleInstanceService (демонстрационный пример).

я использую .. Advanced Installer для создания монтажника

Обратите внимание, что JWS:

  1. также установки приложения. Поэтому я предлагаю этот маршрут как альтернативу с использованием «расширенного установщика».
  2. Предоставлен разработчиками Java (Sun/Oracle).
1

Заканчивать http://ss64.com/nt/wmic.html и попробовать

String line; 
try { 
    Process proc = Runtime.getRuntime().exec("wmic.exe"); 
    BufferedReader input = new BufferedReader(new InputStreamReader(proc.getInputStream())); 
    OutputStreamWriter oStream = new OutputStreamWriter(proc.getOutputStream()); 
    oStream .write("process where name='THE NAME OF YOUR PROCESS.exe'"); 
    oStream .flush(); 
    oStream .close(); 
    while ((line = input.readLine()) != null) { 
     System.out.println(line); 
    }: 
    input.close(); 
} catch (IOException ioe) { 
    ioe.printStackTrace(); 
} 

Предоставлено: How to detect via Java whether a particular process is running under Windows?

Смежные вопросы