Я разработал exe-версию своего Java-приложения и запускаю его с флешки. Выполнение займет некоторое время. Но мой конечный пользователь считает, что он не работает, и щелкает во второй раз. Мне нужно это остановить. Мне нужно остановить непрерывный клик на exe, пока он запущен. Я использовал сценарий оболочки, чтобы проверить, работает ли exe или нет. И выводит сообщение, что exe уже запущен. И останавливает дальнейший процесс. Мне нужно, чтобы это произошло во время работы exe во второй раз. Я не мог понять это. Есть ли способ отключить exe от клика, пока он запущен. Или как я могу проверить, запущен он или нет.
import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.InputStreamReader;
public class VBSUtils {
private VBSUtils() { }
public static boolean isRunning(String process) {
boolean found = false;
try {
File file = File.createTempFile("realhowto",".vbs");
file.deleteOnExit();
FileWriter fw = new java.io.FileWriter(file);
String vbs = "Set WshShell = WScript.CreateObject(\"WScript.Shell\")\n"
+ "Set locator = CreateObject(\"WbemScripting.SWbemLocator\")\n"
+ "Set service = locator.ConnectServer()\n"
+ "Set processes = service.ExecQuery _\n"
+ " (\"select * from Win32_Process where name='" + process +"'\")\n"
+ "For Each process in processes\n"
+ "wscript.echo process.Name \n"
+ "Next\n"
+ "Set WSHShell = Nothing\n";
fw.write(vbs);
fw.close();
Process p = Runtime.getRuntime().exec("cscript //NoLogo " + file.getPath());
BufferedReader input =
new BufferedReader
(new InputStreamReader(p.getInputStream()));
String line;
line = input.readLine();
if (line != null) {
if (line.equals(process)) {
found = true;
}
}
input.close();
}
catch(Exception e){
e.printStackTrace();
}
return found;
}
}
И в моем основном классе я позвонил VBUtils.
boolean result = VBSUtils.isRunning("myexe.exe");
if(result)
{
msgBox("myexe is running. Please wait");
}
else
{
// my part of execution.
}
Если я так позвоню, exe завершится. И первое и второе исполнение.