/// <summary>
/// 通过注册表读取某字符串数值
/// </summary>
/// <param name="subPath"></param>
/// <param name="name"></param>
/// <returns></returns>
public static string? ReadPathFromReg(string subPath, string name) {
string? res = null;
try {
RegistryKey? key = Registry.LocalMachine.OpenSubKey(subPath);
if (key is not null) {
res = key.GetValue(name)?.ToString();
key.Close();
}
} catch (Exception) {
}
if (res == null) {
try {
RegistryKey? key = Registry.CurrentUser.OpenSubKey(subPath);
if (key is not null) {
res = key.GetValue(name)?.ToString();
key.Close();
}
} catch (Exception) {
}
}
return res;
}
package main
import (
"fmt"
"github.com/Microsoft/Windows-sysinternals-docs/blob/master/registry/goreg"
)
func main() {
subPath := "YourRegistrySubPath"
name := "YourValueName"
value, err := ReadValueFromReg(subPath, name)
if err != nil {
fmt.Println("Error reading from registry:", err)
} else {
fmt.Println("Value read from registry:", value)
}
}
func ReadValueFromReg(subPath, name string) (string, error) {
// First, try to read from LocalMachine hive
key, err := winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, subPath, winreg.QUERY_VALUE)
if err == nil {
defer key.Close()
value, _, err := key.GetStringValue(name)
if err == nil {
return value, nil
}
}
// If that fails, try to read from CurrentUser hive
key, err = winreg.OpenKey(winreg.HKEY_CURRENT_USER, subPath, winreg.QUERY_VALUE)
if err == nil {
defer key.Close()
value, _, err := key.GetStringValue(name)
if err == nil {
return value, nil
}
}
return "", err
}