我正在處理文件關聯。我已經確定,有一個名爲UserChoice
鍵:通過C#從註冊表中的'UserChoice'鍵刪除'拒絕'規則(權限)
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\[ext].
我已經能夠讀取和寫入提供我創建它的UserChoice
關鍵,它具有不已創建的視窗。但是,如果UserChoice
密鑰已經由Windows創建,那麼我需要以管理員身份運行才能訪問密鑰。我的最終目標是刪除的UserChoice
鍵。
我注意到,Windows將拒絕規則放在UserChoice
密鑰上,這會阻止我刪除該密鑰。如果我能成功取消該規則,我相信我將能夠刪除UserChoice
密鑰。這裏是我已經試過代碼:
public static void ShowSecurity(RegistryKey regKeyRoot, string user) {
RegistrySecurity security = regKeyRoot.GetAccessControl(AccessControlSections.All);
foreach (RegistryAccessRule ar in
security.GetAccessRules(true, true, typeof(NTAccount))) {
if (ar.IdentityReference.Value.Contains(User) &&
ar.AccessControlType.ToString().ToLower() == "deny") {
security.RemoveAccessRuleSpecific(ar);
regKeyRoot.SetAccessControl(security);
}
}
}
當Windows創建UserChoice
鍵將其添加爲拒絕類型的當前用戶安全規則;許可:特殊。此規則不會被繼承,只適用於UserChoice
密鑰。
隨着管理員的一些混亂和運行,我可以訪問那RegistryAccessRule
。但是,即使以管理員身份運行,我也無法刪除此規則。我在我的研究中讀到過,沒有一種編程方式可以做到這一點。我可以通過RegEdit刪除這條規則。我還可以使用NirSoft的文件類型管理器來刪除UserChoice
密鑰。所以我假設有一些方法可以做到這一點。
摘要:有沒有辦法可以刪除拒絕規則,以便我可以刪除UserChoice
密鑰?
任何人都找到了一種方法來做到這一點?我遇到了同樣的問題。 – Jason 2011-05-31 16:00:07
不幸的是,據我所知不是。我已經做了一些更多的工作,但我認爲它需要非託管代碼.......... – ScruffyDuck 2011-06-02 18:03:35
@ScruffyDuck你的代碼絕對是正確的。你的代碼和[ali的答案](http://stackoverflow.com/a/28268069/1497596)中提供的修訂代碼使我獲得成功。 *不*必須訴諸非託管代碼。請參閱[我的答案](http://stackoverflow.com/a/41290208/1497596)。 – DavidRR 2016-12-22 19:51:02