首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用Java的Linux机器上获取主板序列号/ID,用于反盗版用途

在使用Java的Linux机器上获取主板序列号/ID,用于反盗版用途
EN

Stack Overflow用户
提问于 2013-05-04 14:15:31
回答 1查看 1.7K关注 0票数 0

我使用此代码在windows中获取主板ID:

代码语言:javascript
复制
public static String getMotherboardSN() {
    String result = "";
    try {
        File file = File.createTempFile("realhowto", ".vbs");
        file.deleteOnExit();
        FileWriter fw = new java.io.FileWriter(file);

        String vbs = "Set objWMIService = GetObject(\"winmgmts:\\\\.\\root\\cimv2\")\n"
                + "Set colItems = objWMIService.ExecQuery _ \n"
                + " (\"Select * from Win32_BaseBoard\") \n"
                + "For Each objItem in colItems \n"
                + " Wscript.Echo objItem.SerialNumber \n"
                + " exit for ' do the first cpu only! \n" + "Next \n";

        fw.write(vbs);

        fw.close();
        Process p = Runtime.getRuntime().exec(
                "cscript //NoLogo " + file.getPath());
        BufferedReader input = new BufferedReader(new InputStreamReader(p
                .getInputStream()));
        String line;
        while ((line = input.readLine()) != null) {
            result = line;
        }
        input.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return result.trim();
}

在ubuntu服务器中尝试此代码会抛出一个异常:

代码语言:javascript
复制
java.io.IOException: Cannot run program "cscript": error=2, No such file or directory
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
    at java.lang.Runtime.exec(Runtime.java:615)
    at java.lang.Runtime.exec(Runtime.java:448)
    at java.lang.Runtime.exec(Runtime.java:345)
    at tcs.util.MiscUtils.getMotherboardSN(MiscUtils.java:31)
    at tcs.util.Validator.validate(Validator.java:13)
    at test.Shoot.main(Shoot.java:31)
Caused by: java.io.IOException: error=2, No such file or directory
    at java.lang.UNIXProcess.forkAndExec(Native Method)
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:135)
    at java.lang.ProcessImpl.start(ProcessImpl.java:130)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1021)

我已经在谷歌上搜索过了,但没有找到linux的解决方案。我也在这里尝试了Printing my Mac's serial number in java using Unix commands的解决方案,但仍然没有成功。我知道有一些解决方案是用C/C++编写的,但使用JNI不是一种选择,因为我们在这方面没有经验,无法按时完成。如有任何建议,我们将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2013-05-05 11:46:20

对绝对路径使用"cscript“命令

FULL_PATH/cscript //NoLogo“+file.getPath()

示例: /home/myprojext/cscript //NoLogo“+file.getPath()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16371198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档