From 780ff45fdc167cadf4724c6c94530929b7445aab Mon Sep 17 00:00:00 2001
From: zwl <1051256694@qq.com>
Date: 星期一, 16 三月 2026 10:37:51 +0800
Subject: [PATCH] 完善许可证

---
 src/main/java/com/zy/system/entity/license/WindowsServerInfos.java |  107 +++++++++++++++++++++++++++++++++++------------------
 1 files changed, 70 insertions(+), 37 deletions(-)

diff --git a/src/main/java/com/zy/system/entity/license/WindowsServerInfos.java b/src/main/java/com/zy/system/entity/license/WindowsServerInfos.java
index c575e6d..7ae9d96 100644
--- a/src/main/java/com/zy/system/entity/license/WindowsServerInfos.java
+++ b/src/main/java/com/zy/system/entity/license/WindowsServerInfos.java
@@ -1,8 +1,10 @@
 package com.zy.system.entity.license;
 
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
 import java.net.InetAddress;
+import java.nio.charset.Charset;
 import java.util.List;
-import java.util.Scanner;
 import java.util.stream.Collectors;
 
 /**
@@ -33,7 +35,11 @@
 
         if(inetAddresses != null && inetAddresses.size() > 0){
             //2. 鑾峰彇鎵�鏈夌綉缁滄帴鍙g殑Mac鍦板潃
-            result = inetAddresses.stream().map(this::getMacByInetAddress).distinct().collect(Collectors.toList());
+            result = inetAddresses.stream()
+                    .map(this::getMacByInetAddress)
+                    .filter(mac -> mac != null && !mac.trim().isEmpty())
+                    .distinct()
+                    .collect(Collectors.toList());
         }
 
         return result;
@@ -41,45 +47,72 @@
 
     @Override
     protected String getCPUSerial() throws Exception {
-        //搴忓垪鍙�
-        String serialNumber = "";
-
-        //浣跨敤WMIC鑾峰彇CPU搴忓垪鍙�
-        Process process = Runtime.getRuntime().exec("wmic cpu get processorid");
-        process.getOutputStream().close();
-        Scanner scanner = new Scanner(process.getInputStream());
-
-        if(scanner.hasNext()){
-            scanner.next();
+        String serialNumber = readCommandValue("wmic", "cpu", "get", "processorid");
+        if (!isBlank(serialNumber)) {
+            return serialNumber;
         }
-
-        if(scanner.hasNext()){
-            serialNumber = scanner.next().trim();
-        }
-
-        scanner.close();
-        return serialNumber;
+        return readCommandValue("powershell", "-NoProfile", "-Command",
+                "(Get-CimInstance Win32_Processor | Select-Object -First 1 -ExpandProperty ProcessorId)");
     }
 
     @Override
     protected String getMainBoardSerial() throws Exception {
-        //搴忓垪鍙�
-        String serialNumber = "";
-
-        //浣跨敤WMIC鑾峰彇涓绘澘搴忓垪鍙�
-        Process process = Runtime.getRuntime().exec("wmic baseboard get serialnumber");
-        process.getOutputStream().close();
-        Scanner scanner = new Scanner(process.getInputStream());
-
-        if(scanner.hasNext()){
-            scanner.next();
+        String serialNumber = readCommandValue("wmic", "baseboard", "get", "serialnumber");
+        if (!isBlank(serialNumber)) {
+            return serialNumber;
         }
-
-        if(scanner.hasNext()){
-            serialNumber = scanner.next().trim();
-        }
-
-        scanner.close();
-        return serialNumber;
+        return readCommandValue("powershell", "-NoProfile", "-Command",
+                "(Get-CimInstance Win32_BaseBoard | Select-Object -First 1 -ExpandProperty SerialNumber)");
     }
-}
\ No newline at end of file
+
+    private String readCommandValue(String... command) {
+        try {
+            ProcessBuilder processBuilder = new ProcessBuilder(command);
+            processBuilder.redirectErrorStream(true);
+            Process process = processBuilder.start();
+            process.getOutputStream().close();
+
+            try (BufferedReader reader = new BufferedReader(
+                    new InputStreamReader(process.getInputStream(), Charset.forName("GBK")))) {
+                String line;
+                while ((line = reader.readLine()) != null) {
+                    String value = normalizeCommandOutput(line);
+                    if (!isBlank(value)) {
+                        return value;
+                    }
+                }
+            }
+        } catch (Exception ignored) {
+        }
+        return "";
+    }
+
+    private String normalizeCommandOutput(String line) {
+        if (line == null) {
+            return "";
+        }
+        String value = line.trim();
+        if (isBlank(value)) {
+            return "";
+        }
+        String lower = value.toLowerCase();
+        if ("processorid".equals(lower) || "serialnumber".equals(lower)) {
+            return "";
+        }
+        if (lower.contains("access denied")
+                || lower.contains("鎷掔粷璁块棶")
+                || lower.contains("get-ciminstance")
+                || lower.contains("fullyqualifiederrorid")
+                || lower.contains("at line:")
+                || lower.contains("categoryinfo")
+                || lower.contains("cimexception")
+                || lower.contains("createprocess error")) {
+            return "";
+        }
+        return value;
+    }
+
+    private boolean isBlank(String value) {
+        return value == null || value.trim().isEmpty();
+    }
+}

--
Gitblit v1.9.1