1

Я разработал приложение C # WPF, которое будет отображать файлы .pdf для пользователя. Пользователь может загрузить PDF напрямую

Файл -> Загрузить -> (выбрать файл PDF) -> Открыть

после выбора файла PDF и нажатия кнопки «Открыть» файл PDF отображается изнутри приложения.

Или они могут открыть папку ZIP, содержащую один файл PDF, и PDF внутри этого ZIP автоматически будет показан пользователю из приложения.

Файл -> Загрузить -> (выберите папку ZIP) -> Открыть

после выбора ZIP-файла (известно, что содержимое ZIP-файла полностью состоит из одного PDF-файла) и нажатия кнопки «Открыть» PDF-файл внутри этого ZIP-файла отображается изнутри приложения (так же, как просто открывается PDF-файл напрямую) ,

Теперь я хочу изменить свою программу так, чтобы она могла открывать «папку» с пользовательским расширением, т.е. я хочу создать папку, похожую на ZIP, содержащую один файл PDF, но расширение этой папки должно быть чем-то Я выбираю, а не .zip , например, чтобы у меня была сжатая папка с именем folder.abc , содержащая один файл PDF xyz.pdf .

Затем я хочу связать расширение .abc с моим приложением, чтобы в любое время, когда пользователь дважды щелкает файл / папку .abc , оно автоматически открывается моим приложением.

Что я не знаю, как я могу создать собственное расширение и использовать его? Например, как я могу изменить folder.zip на folder.abc и получить что-либо с расширением .abc автоматически назначаемое для открытия моим приложением, когда пользователь дважды щелкает по нему?

редактировать

Итак, я могу создавать пользовательские файлы со своим собственным расширением, создав файл .txt, открыв его, а затем снова сохранив его, установив его тип в значение « All Files и присвоив ему имя, заканчивающееся на .abc , то есть customFile.abc , и я могу связать свое расширение с моим приложением, щелкнув его правой кнопкой мыши, выбрав «Открыть с помощью» и выбрав свое собственное приложение.

Я также могу сделать это с папкой ZIP таким же образом.

Однако, когда я в настоящее время открываю какие-либо файлы / папки, которым я назначил свое собственное расширение, они просто открывают мое приложение с пустым окном, т.е. содержащиеся в них файлы .pdf не отображаются - я должен затем использовать свое приложение окно, чтобы открыть их. Я делаю это, выбирая «Файл» -> «Открыть» и выбирая файл .abc который я только что дважды щелкнул, чтобы открыть окно приложения, а затем отображает PDF, который содержит этот файл .abc ...

Почему он не отображает автоматически .pdf автоматически, когда я дважды щелкаю по нему из проводника Windows?

1 ответ1

3

Это можно сделать разными способами. Например, вы можете испортить реестр, используя стандартные инструменты редактирования реестра. Тем не менее, есть также способ повлиять на это с помощью командной строки. Поскольку это, вероятно, проще для автоматизации, это хороший способ продемонстрировать это. Поскольку ваш вопрос обнаружил выдуманное расширение .abc , я его использую.

Из командной строки перейдите в командную строку. Если у вас включено UAC, это должна быть командная строка с повышенными правами.

Сначала создайте тип файла. например:

ftype zzzfile=C:\Windows\System32\Notepad.exe %%1

Затем просмотрите ваши результаты:

ftype zzzfile
reg query HKCR\zzzfile\SHELL\OPEN\COMMAND /ve

Заметки:

  • При создании этого типа файла "%% 1" предназначен для экранирования знака процента. Два знака процента становятся одним. Поэтому, когда вы просматриваете результаты, он просто показывает «% 1» вместо «%% 1».
  • При создании типа файла необходимо указать полное имя исполняемого файла. Все не будет хорошо работать, если вы просто сказали "Блокнот". (Под "все будет плохо" я подразумеваю, что Windows спросит пользователя, что делать с расширением.) C:\Windows\System32\ действительно показался необязательным, а «.exe» - нет.

Затем свяжите расширение с вашим типом файла. Опять же, это изменяет поведение вашей системы, поэтому, если UAC включен, перейдите в командную строку с повышенными привилегиями. Бежать:

assoc .abc=zzzfile

Теперь из этой командной строки или без повышения прав вы можете проверить свои результаты:

assoc .abc
start filename.abc

(Протестировано с Windows 7 x64.)


Примечание: во время предварительного тестирования я заглянул в GUI. Это препятствовало использованию FTYPE и ASSOC с одинаковым расширением.

Выявить проблему было достаточно просто. Исправить это не было.

Я смог найти проблему с помощью этого:

REG QUERY HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.abc /s

К сожалению, это не сработало, чтобы удалить его:

REG DELETE HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.abc
REG DELETE HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.abc\UserChoice /v Progid

Я подтвердил проблему с графической программой: REGEDIT в UserChoice, затем "Правка", «Разрешения ...», (мое имя пользователя), "Дополнительно" (вкладка "Разрешения") показали, что у меня есть DENY, тип Special. Отредактируйте ... оттуда показали, что "Set Value" был Deny.

Способ исправить это из командной строки - REGINI, из набора ресурсов NT 4. Чтобы сделать все так, мне нужно было определить свой SID.

wmic USERACCOUNT Получить имя, SID (Найти мою учетную запись. SID начинается с «S-».)

Сделайте текстовый файл. Я решил назвать это «fix.txt».

В KB 254031 указана первая строка «\Registry\User\», за которой следует SID пользователя. Таким образом, текстовый файл начнется с этого.

Несмотря на некоторые примеры в различных статьях Microsoft KB, синтаксис может быть коротким, как одна строка, как показано (но требует настройки ...)

\Registry\User\S-#-#-##-##########-##########-##########-1000\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.abc\UserChoice [1 5 7 17]

(Естественно, настройте «.abc» на любое расширение, которое вы пытаетесь исправить. Также необходимо заменить #, чтобы использовать действительный идентификатор безопасности.)

Затем используйте этот текстовый файл с: REGINI fix.txt

Теперь, когда ключ не мешает нам вносить изменения, мы можем удалить значение Progid ключа UserChoice. На самом деле, идти вперед и удалить весь ключ, связанный с этим расширением.

REG DELETE HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.abc

Затем этот раздел реестра больше не переопределялся, поэтому результаты FTYPE и ASSOC вступали в силу по желанию.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .