Сбой команды 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, но та же ошибка появляется в тесте пробного запуска.

0 ответов

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