Windows でコード (c#) を使用していくつかのレジストリ キーからいくつかの値を読み取ろうとしたところ、値を読み取ることができなかった理由は、管理者ユーザーにアクセス許可がないためであることがわかりました。
そのため、問題を引き起こしているレジストリ キーに手動で移動したところ、アクセス許可タブは次のように表示されました。
それで、ユーザー「システム」としてプロセスを実行するにはどうすればよいか考えさせられましたか?それは奇妙に聞こえますが、どうやらシステムユーザーの権利があるようです? 管理者として実行する方法は知っていますが、システムとして実行することも可能かもしれません。
編集
これが私のコードです。基本的に、すべてのレジストリ キーをトラバースしたいと思います。
class Program
{
// class to store reg key.
[Serializable]
[DebuggerDisplay("Name = {Name}, Val = {value}, type={type}")]
class MyRegKey
{
public string Name;
public object value;
public RegistryValueKind type;
public List<MyRegKey> SubKeys = new List<MyRegKey>();
public List<MyRegKey> Values = new List<MyRegKey>();
}
static MyRegKey root = new MyRegKey();
static void TraverseTree(RegistryKey key, MyRegKey temp)
{
foreach (var v in key.GetValueNames())
{
var kind = key.GetValueKind(v);
var value = key.GetValue(v, null);
var name = v;
temp.Values.Add(new MyRegKey { Name = name, value = value, type = kind });
}
var x = key.GetSubKeyNames();
for (var i = 0; i < x.Length; i++)
{
RegistryKey productKey;
productKey = key.OpenSubKey(x[i], false); // <--------- Code crashes here
if (productKey != null)
{
var y = new MyRegKey() { Name = productKey.Name };
temp.SubKeys.Add(y);
Foo(productKey, y);
}
}
}
public static void Main()
{
var key = Registry.LocalMachine;
root.Name = key.Name;
TraverseTree(key, root);
}
}
そのコードを管理者として実行しています...
そして、これは私のプログラムがどのようにクラッシュし、権限がないことを示しているかの画像です: