Есть ли какой-либо способ программно установить раздел реестра «UserChoice», чтобы получить связь с типом файла? - PullRequest
10 голосов
/ 31 мая 2011

Я пытался найти способ изменить сопоставление файлов по умолчанию для конкретное расширение файла в Windows 7. У меня есть приложение, которое используется для просмотра .tif файлы, которые я хочу предложить пользователю, если он не является средством просмотра по умолчанию для этого файла тип. Если они решили сделать его по умолчанию, я хочу переопределить текущий просмотрщик по умолчанию. Это прекрасно работает, если на система. Когда есть другой зритель, который был выбран пользователем, я не может изменить раздел реестра, который контролирует это здесь:

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tif\UserChoice

Я искал в Интернете, пытаясь найти кого-то, кто сделал это, но никто Кажется, есть какие-либо ответы. Когда я пытаюсь обновить значение «Progid» в этом ключ, я получаю «Невозможно записать в раздел реестра» или «Запрашивается доступ к реестру не допускаются »ошибки. Код достаточно прост:

var path = @"Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tif\UserChoice";
var key = Registry.CurrentUser.OpenSubKey(path, true);
key.SetValue("Progid", "myprogid...");

Есть ли специальная защита для этого ключа, которая предотвращает его программно отредактировано?

Ответы [ 4 ]

1 голос
/ 27 ноября 2012

Чтобы иметь возможность записи в ключ UserChoice, вам нужно было вступить во владение ключом перед записью в него (например, этот код - не в c # (C ++), но я предполагаю, что это можно сделатьтак же).

Вы сможете писать в ключ, и ваш код ассоциации файлов будет работать!

РЕДАКТИРОВАТЬ: См. Также Безопасность ключа реестра и права доступа на MSDN

0 голосов
/ 21 января 2013

Если вы еще не нашли способ сделать это, попробуйте инструменты командной строки assoc и ftype . Обратите внимание, что вам нужно будет запускать их с правами администратора.

  1. Создайте пакетный скрипт, который использует Assoc и Ftype для установки ассоциации файлов.
  2. Используйте System.Diagnostics.Process для выполнения пакетного сценария.

В основном вам нужно создать файл .bat (или .cmd) со следующими строками:

ASSOC .txt=TXTFileWordPad    
FTYPE TXTFileWordPad="%ProgramFiles%\Windows NT\Accessories\wordpad.exe" %%1

Для получения дополнительной информации о том, как использовать этот инструмент, посмотрите: Управление файлами из командной строки - Assoc и Ftype .

0 голосов
/ 27 ноября 2012

Эта ссылка может иметь дополнительную информацию для вас: Как мне вступить во владение ключом реестра с помощью C #, а именно: RegOpenKeyEx и RegSetKeySecurity ??

0 голосов
/ 22 сентября 2012

Это кажется неизменным, но вы можете удалить UserChoice.

...