8355249: Remove the use of WMIC from the entire source code

Reviewed-by: erikj, ihse, asemenyuk
This commit is contained in:
Daishi Tabata 2025-05-07 06:19:56 +00:00 committed by Magnus Ihse Bursie
parent 772c97039e
commit 4458719a10
4 changed files with 30 additions and 26 deletions

View file

@ -217,9 +217,9 @@ else ifeq ($(OPENJDK_TARGET_OS), macosx)
else ifeq ($(OPENJDK_TARGET_OS), windows)
NUM_CORES := $(NUMBER_OF_PROCESSORS)
MEMORY_SIZE := $(shell \
$(EXPR) `wmic computersystem get totalphysicalmemory -value \
| $(GREP) = | $(SED) 's/\\r//g' \
| $(CUT) -d "=" -f 2-` / 1024 / 1024 \
$(EXPR) `powershell -Command \
"(Get-CimInstance Win32_ComputerSystem).TotalPhysicalMemory" \
| $(SED) 's/\\r//g' ` / 1024 / 1024 \
)
endif
ifeq ($(NUM_CORES), )

View file

@ -1,5 +1,5 @@
#
# Copyright (c) 2011, 2024, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2011, 2025, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@ -75,7 +75,8 @@ AC_DEFUN([BPERF_CHECK_MEMORY_SIZE],
FOUND_MEM=yes
elif test "x$OPENJDK_BUILD_OS" = xwindows; then
# Windows, but without cygwin
MEMORY_SIZE=`wmic computersystem get totalphysicalmemory -value | grep = | cut -d "=" -f 2-`
MEMORY_SIZE=`powershell -Command \
"(Get-CimInstance Win32_ComputerSystem).TotalPhysicalMemory" | $SED 's/\\r//g' `
MEMORY_SIZE=`expr $MEMORY_SIZE / 1024 / 1024`
FOUND_MEM=yes
fi

View file

@ -1,5 +1,5 @@
#
# Copyright (c) 2015, 2024, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2015, 2025, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@ -22,10 +22,10 @@
#
config.execSuffix=.exe
config.getChildren.app=bash
config.getChildren.app=powershell
config.getChildren.pattern=%p
config.getChildren.args=-c\0wmic process where ParentProcessId=%p get ProcessId | tail -n+2
config.getChildren.args.delimiter=\0
config.getChildren.args=-NoLogo\0-Command\0"Get-CimInstance Win32_Process -Filter \\\"ParentProcessId = %p\\\" | Select-Object ProcessId" | tail -n+4
################################################################################
# process info to gather
################################################################################
@ -39,8 +39,9 @@ native.pattern=%p
native.javaOnly=false
native.args=%p
native.info.app=wmic
native.info.args=process where processId=%p list full
native.info.app=powershell
native.info.delimiter=\0
native.info.args=-NoLogo\0-Command\0"Get-WmiObject Win32_Process -Filter \\\"ProcessId = %p\\\" | Format-List -Property *"
native.pmap.app=pmap
native.pmap.normal.args=%p
@ -96,8 +97,9 @@ system.events.delimiter=\0
system.events.system.args=-NoLogo\0-Command\0Get-EventLog System -After (Get-Date).AddDays(-1) | Format-List
system.events.application.args=-NoLogo\0-Command\0Get-EventLog Application -After (Get-Date).AddDays(-1) | Format-List
system.os.app=wmic
system.os.args=os get /format:list
system.os.app=powershell
system.os.delimiter=\0
system.os.args=-NoLogo\0-Command\0Get-WmiObject Win32_OperatingSystem | Format-List -Property *
process.top.app=top
process.top.args=-b -n 1

View file

@ -322,32 +322,33 @@ public class WindowsHelper {
private static long[] findAppLauncherPIDs(JPackageCommand cmd, String launcherName) {
// Get the list of PIDs and PPIDs of app launcher processes. Run setWinRunWithEnglishOutput(true) for JDK-8344275.
// wmic process where (name = "foo.exe") get ProcessID,ParentProcessID
final var result = Executor.of("wmic", "process", "where", "(name",
"=",
"\"" + cmd.appLauncherPath(launcherName).getFileName().toString() + "\"",
")", "get", "ProcessID,ParentProcessID").dumpOutput(true).saveOutput().
setWinRunWithEnglishOutput(true).execute();
if ("No Instance(s) Available.".equals(result.stderr().findFirstLineOfOutput().map(String::trim).orElse(""))) {
// powershell -NoLogo -NoProfile -NonInteractive -Command
// "Get-CimInstance Win32_Process -Filter \"Name = 'foo.exe'\" | select ProcessID,ParentProcessID"
String command = "Get-CimInstance Win32_Process -Filter \\\"Name = '"
+ cmd.appLauncherPath(launcherName).getFileName().toString()
+ "'\\\" | select ProcessID,ParentProcessID";
List<String> output = Executor.of("powershell", "-NoLogo", "-NoProfile", "-NonInteractive", "-Command", command)
.dumpOutput(true).saveOutput().setWinRunWithEnglishOutput(true).executeAndGetOutput();
if (output.size() < 1) {
return new long[0];
}
final var stdout = result.stdout();
String[] headers = Stream.of(stdout.getFirstLineOfOutput().split("\\s+", 2)).map(
String[] headers = Stream.of(output.get(1).split("\\s+", 2)).map(
String::trim).map(String::toLowerCase).toArray(String[]::new);
final Pattern pattern;
Pattern pattern;
if (headers[0].equals("parentprocessid") && headers[1].equals(
"processid")) {
pattern = Pattern.compile("^(?<ppid>\\d+)\\s+(?<pid>\\d+)\\s+$");
pattern = Pattern.compile("^\\s+(?<ppid>\\d+)\\s+(?<pid>\\d+)$");
} else if (headers[1].equals("parentprocessid") && headers[0].equals(
"processid")) {
pattern = Pattern.compile("^(?<pid>\\d+)\\s+(?<ppid>\\d+)\\s+$");
pattern = Pattern.compile("^\\s+(?<pid>\\d+)\\s+(?<ppid>\\d+)$");
} else {
throw new RuntimeException(
"Unrecognizable output of \'wmic process\' command");
"Unrecognizable output of \'Get-CimInstance Win32_Process\' command");
}
List<long[]> processes = stdout.getOutput().stream().skip(1).map(line -> {
List<long[]> processes = output.stream().skip(3).map(line -> {
Matcher m = pattern.matcher(line);
long[] pids = null;
if (m.matches()) {