Сбой команды Windows, связанной с Java в Excelsior Jet
Я использую Excelsior Jet Installer для создания пакетов Java. В своем коде Java я использую команду wmic, чтобы получить серийный номер жесткого диска.
public static String getHDSN3() throws IOException {
String currentdirectory = System.getProperty("user.dir");
String drive = currentdirectory.substring(0, 2);
String command = "wmic logicaldisk where (DeviceID=\"" + drive + "\") assoc /assocclass:Win32_LogicalDiskToPartition";
Process p = Runtime.getRuntime().exec(command);
BufferedReader inn = new BufferedReader(new InputStreamReader(p.getInputStream()));
String diskpartition = "";
String deviceid = "";
String serialnumber = "";
while (true) {
String line = inn.readLine();
if (line == null) {
break;
}
Pattern pattern = Pattern.compile("\\bDisk #\\d, Partition #\\d");
Matcher m = pattern.matcher(line);
if (m.find()) {
int inicio = m.start();
int fin = m.end();
diskpartition = line.substring(inicio, fin);
}
}
command = "wmic partition where (DeviceID=\"" + diskpartition + "\") assoc /assocclass:Win32_DiskDriveToDiskPartition";
p = Runtime.getRuntime().exec(command);
inn = new BufferedReader(new InputStreamReader(p.getInputStream()));
while (true) {
String line = inn.readLine();
if (line == null) {
break;
}
Pattern pattern = Pattern.compile("\\\\\\\\.\\\\PHYSICALDRIVE\\d");
Matcher m = pattern.matcher(line);
if (m.find()) {
int inicio = m.start();
int fin = m.end();
deviceid = line.substring(inicio, fin);
}
}
deviceid = deviceid.replace("\\\\.\\", "\\\\\\\\.\\\\");
command = "wmic path win32_diskdrive where deviceid='" + deviceid + "' get serialnumber";
p = Runtime.getRuntime().exec(command);
inn = new BufferedReader(new InputStreamReader(p.getInputStream()));
while (true) {
String line = inn.readLine();
if (line == null) {
break;
}
if (!line.equalsIgnoreCase("Serialnumber") && !line.equals("")) {
serialnumber = line;
}
}
return serialnumber.trim();
}
Когда я выполняю код (из Netbeans и непосредственно из jar-файла), он запускается без проблем. Метод возвращает серийный номер жесткого диска. После этого я создаю exe с Jet Control Panel. Exe тоже работает без проблем. Проблемы возникают, когда я создаю установщик с JetPackII. Тест Trial Run возвращает следующую ошибку:
Exception in thread "main" java.io.IOException: Cannot run program "wmic": CreateProcess error=2, El sistema no puede encontrar el archivo especificado
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at dam.VerifySerial.getHDSN3(Unknown Source)
at paquete.Visual.main(Unknown Source)
Caused by: java.io.IOException: CreateProcess error=2, El sistema no puede encontrar el archivo especificado
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
... 7 more
Как видите, проблема в команде wmic в методе getHDSN3(). Неделю назад этот код был в порядке. Я не знаю, что происходит.
PD: Если я пропущу пробный запуск, я смогу продолжить установку без проблем, но я хочу знать, в чем проблема. Я пытался упаковать код Java на других компьютерах с другими версиями Windows, но та же ошибка появляется в тесте пробного запуска.