Как удалить сопоставление файлов на пользователя - PullRequest
1 голос
/ 14 мая 2011

Заранее извиняюсь за еще один вопрос о файловых ассоциациях. Я изменил код, который я использую для создания ассоциации файлов, чтобы он использовал HKEY_CURRRENT_USER \ Software \ Classes. Это снимает проблему с требованием прав администратора (спасибо Дэвиду Хеффернану за то, что он настаивал на этом).

Я обнаружил, что продолжающееся создание ассоциации файлов не дублирует ее в реестре, а изменяет данные. Поэтому, если я назначаю другой исполняемый файл, он заменяет предыдущий на текущий. Однако я хотел увидеть, как полностью очистить файловую ассоциацию. Я просто ищу запись и, если она есть, вынимаю ключ:

public static void RemoveAssociation(string extension) {
       if (!IsAssociated(extension)) return;
       var currentUser = Registry.CurrentUser;
       var softwareKey = getKey(currentUser, "Software");
       if (softwareKey != null) {
           var softwareClasses = getKey(softwareKey, "Classes");
           if (softwareClasses != null) {
               softwareClasses.DeleteSubKey(extension);
           }
       }
}

IsAssociated просто ищет ключ расширения в HKEY_CURRENT_USER \ Software \ Classes

Это удаляет ключ, но не все записи в реестре. Я нашел запись в HKEY_CLASSES_ROOT, а также в HKEY_CURRENT_USER \ Software \ Microsoft \ Windows NT \ CurrentVersion \ EXTENSIONS. (Я использую Win 7, поэтому я предполагаю, что это будет в XP и Vista?)

Двойной щелчок по расширению теперь приводит к появлению диалогового окна, сообщающего, что окна не могут найти связанный исполняемый файл (предположительно, потому что я оставил ключ в CLASSES_ROOT, но удалил соединение, удалив ключ)

Так как мне удалить все ссылки на расширение?

Спасибо

EDIT

Это код, который я использую для создания ассоциации:

public static void Associate(string extension, string progID, string description, string icon, string application) {
    if (extension == null) return;
    if (String.IsNullOrEmpty(progID)) return;
    if (String.IsNullOrEmpty(application)) return;

    var currentUser = Registry.CurrentUser;
    var softwareKey = getKey(currentUser, "Software");

    if (softwareKey != null) {
        var softwareClasses = getKey(softwareKey, "Classes");

        if (softwareClasses != null) {
            softwareClasses.CreateSubKey(extension).SetValue("", progID);

            using (var key = softwareClasses.CreateSubKey(progID)) {
                    if (description != null)
                        key.SetValue("", description);
                    if (icon != null)
                        key.CreateSubKey("DefaultIcon").SetValue("", toShortPathName(icon));
                    //if (application != null)
                        key.CreateSubKey(@"Shell\Open\Command").SetValue("", toShortPathName(application) + " \"%1\"");
                }
        }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...