我已经开发了一个C#WPF应用程序,它将向用户显示.pdf文件。用户可以直接加载PDF
文件->加载->(选择PDF文件)->打开
选择PDF并按打开后,将从应用程序内部显示PDF。
或者他们可以打开一个包含单个PDF文件的ZIP文件夹,并且该ZIP内部的PDF会自动从应用程序内部显示给用户
文件->加载->(选择ZIP文件夹)->打开
选择ZIP之后(已知zip的内容完全由一个PDF组成),然后按open,则从应用程序内部显示ZIP内部的PDF(与直接打开PDF相同的方式) 。
现在,我想修改程序,以便它可以打开具有自定义扩展名的“文件夹”,即,我想创建一个文件夹,类似于ZIP,只包含一个PDF文件,但是该文件夹的扩展名应该是我选择(而不是选择)是.zip
为了让我有一个名为的压缩文件夹folder.abc
,其中包含一个PDF xyz.pdf
。
然后,我想将扩展名.abc
与我的应用程序相关联,以便用户每次双击.abc
文件/文件夹时,它都会由我的应用程序自动打开。
我不知道如何创建自定义扩展并使用它?例如,当用户双击应用程序时,如何将其更改folder.zip
为folder.abc
,并.abc
自动将其扩展名分配为由我的应用程序打开?
编辑
好的,因此我可以通过创建一个.txt文件,将其打开,然后再次保存,将其'type'设置为All Files
,并为其提供一个以结尾的名称.abc
(即)来创建具有自己扩展名的自定义文件customFile.abc
,并且我可以关联右键单击我的扩展程序,然后选择“打开方式”,然后选择我自己的应用程序。
我也可以用相同的方式使用ZIP文件夹进行此操作。
但是,当我当前打开使用我的自定义扩展名的任何文件/文件夹时,它们只是用空白窗口打开我的应用程序,即未显示其中包含的.pdf文件-我必须使用我的应用程序打开它们的窗口。我通过选择文件->打开并选择.abc
我双击打开我的应用程序窗口的文件来执行此.abc
操作,然后显示该文件包含的PDF ...
当我从Windows资源管理器中双击包含的.pdf时,为什么它不会自动显示?
有多种方法可以完成此操作。例如,您可以使用标准注册表编辑工具来修改注册表。但是,还有一种方法可以使用命令行来影响它。因为这对于自动化来说可能更容易,所以这是证明这一点的好方法。由于您的问题显示了的扩展名.abc
,因此我使用了该扩展名。
从命令行转到命令提示符。如果启用了UAC,则此命令必须是提升权限的命令提示符。
首先,创建一个文件类型。例如:
ftype zzzfile=C:\Windows\System32\Notepad.exe %%1
然后,查看您的结果:
ftype zzzfile
reg query HKCR\zzzfile\SHELL\OPEN\COMMAND /ve
笔记:
然后,将扩展名与您的文件类型相关联。同样,这会修改您的系统行为,因此,如果启用了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
我确认了一个图形程序的问题:在UserChoice上进行REGEDIT,然后在Edit(编辑),“ Permissions ...”(权限...),(我的用户名),Advanced(高级)(Permissions选项卡)上显示我有一个DENY,请键入Special。编辑...从那里显示“设置值”为“拒绝”。
从命令行修复此问题的一种方法似乎是NT 4资源工具包中的REGINI。为此,我需要弄清楚我的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”调整为您要修复的任何扩展名。#也需要替换,以便使用有效的SID。)
然后,将该文本文件用于: REGINI fix.txt
既然键不妨碍我们进行更改,我们可以删除UserChoice键的Progid值。实际上,继续删除与该扩展名相关的整个密钥。
REG DELETE HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.abc
然后,该注册表项不再被覆盖,因此FTYPE和ASSOC的结果按预期生效。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句