OS (특히 Windows)에 관한 정보를 수집하는 Java 용 API의 일부를 만들고 있습니다. 외부 JAR/API없이이 작업을 수행하려면 레지스트리를 읽어야합니다.Java 용 레지스트리 판독기가 아무 것도 반환하지 않는 이유는 무엇입니까?
코드 :
package main;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class OperatingSystem
{
String edition;
String buildBranch;
String CurrentBuild;
String productName;
String release;
String productID;
String owner;
public static void main(String[] args)
{
OperatingSystem os = new OperatingSystem();
os.getWindowsInfo();
os.returnWindowsBuild();
os.returnWindowsEdition();
os.returnWindowsBranch();
os.returnWindowsRelease();
os.returnProductID();
os.returnWindowsOwner();
}
public String returnWindowsBuild()
{
return CurrentBuild;
}
public String returnWindowsEdition()
{
return edition;
}
public String returnWindowsBranch()
{
return buildBranch;
}
public String returnWindowsRelease()
{
return release;
}
public String returnProductID()
{
return productID;
}
public String returnWindowsOwner()
{
return owner;
}
public void getWindowsInfo()
{
edition = getRegistryValue("\"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\"", "EditionID", "Windows version not detected");
buildBranch = getRegistryValue("\"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\"", "BuildBranch", "Windows build branch not detected");
CurrentBuild = getRegistryValue("\"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\"", "CurrentBuildNumber", "Windows build number not detected");
productName = getRegistryValue("\"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\"", "ProductName", "Windows product name not detected");
release = getRegistryValue("\"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\"", "ReleaseID", "Windows release not detected");
productID = getRegistryValue("\"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\"", "ProductID", "Windows product ID not detected");
owner = getRegistryValue("\"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\"", "RegisteredOwner", "Windows owner not detected");
}
public String getRegistryValue(String query, String value, String Fail)
{
try {
ProcessBuilder builder = new ProcessBuilder(
"cmd.exe",
"/c",
"REG QUERY " + query + " /v " + value
);
Process p = builder.start(); // Query registry
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
for(int i = 0; i < 2; ++i) // Reads line 2 for output
r.readLine();
String result = r.readLine();
return result;
} catch(Exception e) {
return Fail; // Returns the third argument in getRegistryValue, in case the operation fails
}
}
}
그러나, 나는 그것을 실행하면 아무것도 출력하지 않습니다. 어떻게 특정 레지스트리 키의 값을 출력 할 수 있습니까? (이 코드는 한순간에 효과가 있었지만 현재 작동하지 않는 이유는 확실하지 않습니다.)
정확히 어디에서 출력해야할까요? 클래스가 사용되는 곳의 코드를 보여주세요. –
주된 방법은 코드가 실행되는 곳입니다. –
어디서 출력하고 있습니까? –