安全地获取 Windows 机器的 UUID?

我有一个正在销售的 adobe 3rd 方工具,我正在使用 Windows 上的命令行来获取用户的 UUID,使用:

wmic path win32_computersystemproduct get uuid

不幸的是,它不适用于少数收到找不到请求的文件错误的用户。

有没有更好的方法来查找机器的 UUID?如果没有,是否有办法修改此代码以在找不到文件时不引发错误?在我的 JavaScript 端使用 try-catch 似乎无法捕捉到错误。

stack overflow Safely get the UUID of a windows machine?
原文答案

答案:

作者头像

你可以使用我的 wmiClass.bat program 1.3 版;只需从上一个链接复制 .BAT 文件。之后,将其与标准类名一起使用:

wmiClass.bat Win32_ComputerSystemProduct uuid

...或通过 wmic.exe 别名:

wmiClass.bat CSProduct uuid

如果 WMI 类或 wmic.exe 别名不存在,此程序将捕获错误,并以错误消息结束并且 %errorlevel% 等于 1。

作者头像

谢谢大家!没想到这么快就得到这么多帮助。我目前的解决方案(虽然缺乏)是这样的:

 if (isWin) {
    var systemRoot = system.callSystem("cmd /c echo %SystemRoot%") || "";
    var rootDrive = systemRoot.substring(0, 2);
    //var isRootDriveValid = rootDrive.length == 2 && rootDrive.charAt(1) == ":";
    var wmicPath = rootDrive + "WindowsSystem32wbemWMIC.exe";
    var wmic = new File(wmicPath);

    if (!wmic.exists) {
        // wmic is not installed or not found
        // Do something else instead of system.callSystem()
    } else {
        // wmic is installed
        // system.callSystem("wmic path win32_computersystemproduct get uuid");
    }

}

我已经对多个用户进行了测试,它为他们解决了这个问题。我可以使用这种方法验证他们的机器上缺少 WMIC.exe。

然而值得注意的是,我对命令行一无所知,所以请阅读评论,因为他们提供了很多深入的解决方案,我将继续努力学习。

正如 Mofi 在评论中提到的,callSystem() 不喜欢我使用 %SystemRoot%,所以我首先使用 echo 来获取它(有没有更好的方法?)。它似乎有效,但如果有人想扩展我对该主题的缺乏知识,请这样做。

非常喜欢。