Vb.net 将文件扩展名与程序关联

Vb.net 将文件扩展名与程序关联,vb.net,registry,file-association,Vb.net,Registry,File Association,我知道怎么做,我以前也去过。我的问题是这样做有什么作用,有可能逆转吗?如果您不知道您的程序将在哪里,而您现在只是在测试它,该怎么办?有什么方法可以让它“找到”你的程序,或者用一种简单的方法来编辑它的打开位置吗?就这一点而言,是否可以判断文件是否已经关联,是否存在尝试和重新关联的问题?最后,如何设置它使用的.ico文件 谢谢你的帮助,我对注册表几乎一无所知,这让我很困惑,哈哈…为了简单起见,我使用了一个伪根键。实际上,对于系统默认设置,用HKEY\U LOCAL\U MACHINE替换Hive\U

我知道怎么做,我以前也去过。我的问题是这样做有什么作用,有可能逆转吗?如果您不知道您的程序将在哪里,而您现在只是在测试它,该怎么办?有什么方法可以让它“找到”你的程序,或者用一种简单的方法来编辑它的打开位置吗?就这一点而言,是否可以判断文件是否已经关联,是否存在尝试和重新关联的问题?最后,如何设置它使用的.ico文件


谢谢你的帮助,我对注册表几乎一无所知,这让我很困惑,哈哈…

为了简单起见,我使用了一个伪根键。实际上,对于系统默认设置,用
HKEY\U LOCAL\U MACHINE
替换
Hive\U Key
,对于每个用户设置,用
HKEY\U CURRENT\U USER
替换。这两个键中的一个允许存在,或者两者都允许存在。如果两者都存在,
HKCU
键优先

要将扩展名与文件类型关联,需要通过设置默认键值,将扩展键(
Hive\u key\Software\Classes\.ext
)的默认值设置为所选文件类型

在文件类型中可以找到实际启动的程序以及其他文件类型详细信息。文件类型通过被称为
ProgID
的内容来表示(缩写为“编程标识符”,它是类标识符的更易于阅读的版本)。ProgID键可在
Hive\u Key\Software\Classes
中找到,本图的示例值可能是
ext\u auto\u Key

ProgID可能有一个默认值,它将是资源管理器中文件类型的友好描述(如“Microsoft Word文档”)。这取决于您是否选择了用户易于理解的描述

ProgID可能有一个子项,
DefaultIcon
,它是存储文件类型图标的位置。该图标路径是该键的默认值

ProgID键可以是一个子键,
shell
,它将包含文件上的上下文菜单项,以及该上下文菜单项将调用的程序。与ProgID的默认值类似,谓词键的默认值是上下文菜单上显示的文本。此
shell
键的默认值具有默认谓词键名称,即用户双击文件时调用的谓词

这些上下文菜单项是
动词
。对于我们的示例,使用记事本打开文件的谓词如下所示:
Hive\u Key\Software\Classes\ext\u auto\u file\shell\open\command
默认值为
notepad.exe%1

这是您将放置程序路径的位置。如果程序位于系统路径中,如notepad.exe所示,则无需指定完整路径。在更可能的情况下,您需要指定exe的路径。出于测试目的,您可以将其设置为构建目录

您询问了如何检查这些内容,首先检查扩展键的默认值以获取ProgID,然后检查ProgID键的
shell
子键以获取默认谓词,然后检查
\shell\verb\command
以获取启动程序的路径

打开
regedit.exe
并浏览这些注册表项以查找其他文件类型可能会有所启发,从而更好地了解其工作原理

此外,如果特定扩展不受控制面板中设置为默认(默认程序)的程序的控制,则上述所有内容均有效。您可以通过检查密钥
HKEY\U CURRENT\U USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.EXT\UserChoice
的存在来检查此状态。如果是,您将需要在自定义生效之前撤销默认程序控件。这可以通过删除
UserChoice
子键来完成