昨夜から、入力文字列値と一致するレジストリ値を削除するのに役立つ解決策を探してみました。など"C:\Program Files\ArcGIS"
。つまり、レジストリ値が で始まる場合、レジストリ値"C:" and contains "ArcGIS"
を削除します。
最初は item を指定するだけならその種類の値をペラペラ削除しますが、サブキー"HKEY_CURRENT_USER\Software\ESRI"
がない場合はでスキャンする必要があります。"ESRI"
"Software"
私は一日中解決策を探しましたが無駄でした。
管理者として実行するような"app.manifest"
ものを作成して変更してみましたlevel="requireAdministrator"
。さらに、ほとんどの人は「メソッドを使用することは」.OpenSubKey(s,true)
よりも優れていると言うだけ.OpenSubKey(s)
で、同じことわざは「」.DeleteValue(v,false)
よりも優れてい.DeleteValue(v)
ます。
10 件中 7 件のトピックで、 のようなレジストリ値を削除する簡単な方法がいくつか投稿されましたDeleteValue(v,false)
。
ですから、最初は値を変更したり設定したりしないで読む権利があると思いました。しかし、"ArcGIS"
(Just Show/Read) に関するすべてのレジストリ値を表示する場合。いくつかの例外を報告します。
主にコード:
private void MainForm_Load(object sender, EventArgs e) {
RecursiveRegedit(Microsoft.Win32.Registry.CurrentUser);
RecursiveRegedit(Microsoft.Win32.Registry.LocalMachine);
}
//Recursive scan the registry.
void RecursiveRegedit(Microsoft.Win32.RegistryKey regBoot) {
if(regBoot == null) throw new ArgumentNullException("Null Item!");
string[] vals = regBoot.GetValueNames();
foreach(var v in vals) {
string s = regBoot.GetValue(v).ToString();
if(s.StartsWith("C:", StringComparison.CurrentCultureIgnoreCase))
_RKeys.Add(regBoot); //Add to 'List'.
}
if(regBoot.SubKeyCount <= 0) //Exit.
return;
else { //Recursive.
string[] subs = regBoot.GetSubKeyNames();
foreach(string s in subs) {
RecursiveRegedit(regBoot.OpenSubKey(s, Microsoft.Win32.RegistryKeyPermissionCheck.ReadSubTree, System.Security.AccessControl.RegistryRights.ChangePermissions));
//RecursiveRegedit(regBoot.OpenSubKey(s,true));
}
}
regBoot.Close(); //Close.
}
私の質問に加えて、コードを「RegistryRights.FullControl」に変更すると、「HKEY_LOCAL_MACHINE」を右クリックして管理者を追加し、コード「supportedOS Id="{35138b9a-5d96-4fbd-8e2d-」のコメントを外します。 a2440225f93a}",UnauthorizedAccessException ではありませんが、依然として "SecurityException" として報告されます。上記のコードを使用して、セキュリティ項目をスキップして次の項目に進むにはどうすればよいですか? お時間をいただきありがとうございます。