如何正确地将文件关联添加到 Windows 注册表? [英] How to properly add file associations to the Windows Registry?

查看:94
本文介绍了如何正确地将文件关联添加到 Windows 注册表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我应该向 Windows 注册表添加哪些数据和位置以正确创建文件关联?

What data and where, should I add to the Windows registry to properly create a file association?

我问这个问题主要是因为我多年前编写的一些旧应用程序使用 Visual Studio .NET 的 Windows Installer 打包程序来创建文件关联.我安装的扩展是 .whr.encxml.

I ask this question primarily because of some old applications that I wrote years ago, which used Visual Studio .NET's Windows Installer packager to create the file associations. The extensions I installed were .whr and .encxml.

现在,在安装这些应用程序的计算机上,有时会出现一个奇怪的问题 - 当在 Google Chrome 或 Internet Explorer 中下载文件(尤其是 exe、msi 或 zip 文件)时,浏览器会将文件扩展名更改为我的安装程序安装的扩展名之一.我不知道它是否会影响其他浏览器——这两者有什么共同之处吗?所以...如果你下载,例如,http://example.com/downloads/application.exe,文件将被下载为 http://example.com.downloads/application.encxml(或 .whr,无论它现在选择哪个),没有任何明显的原因.

Now, on the computer on which these applications are installed, a strange problem occurs sometimes - when a file is downloaded in either Google Chrome or Internet Explorer (especially an exe, msi or zip file), the browser will change the file extension to one of the extensions that was installed by my installer. I don't know if it affects other browsers - do those two have anything in common? So... if you download, for example, http://example.com/downloads/application.exe, the file will be downloaded as http://example.com.downloads/application.encxml (or .whr, whichever one it picks for the moment) for no apparent reason whatsoever.

我应该注意到 HKCR\.whrHCKR\.encxml 键引用的键(Account Manager Encrypted XML File and Work Hours Record)在他们,当我在 Visual Studio 中创建关联时,我没有添加."到前面来.也许不允许使用空格,和/或您应该以."为前缀?注册表代码似乎没问题,但我通过查看我的注册表注意到,每个其他应用程序都不会使用关联类中的空格,而且我所知道的任何机器上安装的任何应用程序的任何其他文件扩展名也不会发生此问题 - 仅由我的应用程序的 VS 安装程序创建的那些.我已经粘贴了与文件扩展名相关的相应注册表项和值的注册表转储 - 由于 MSI 是专有的,我不知道这是否是全部,但根据我从其他应用程序中了解到的情况,这应该是全部.多年来,我一直想知道这个问题,但一直想不通.我很快就会用更新的产品替换那些旧应用程序之一,所以这次我想确保没有像这样的奇怪错误......

I should note that the keys that the HKCR\.whr and HCKR\.encxml keys reference (Account Manager Encrypted XML File and Work Hours Record) have spaces in them, and when I created the association in Visual Studio, I did NOT add a "." to the front. Perhaps spaces are not allowed, and/or you're supposed to prefix with "."? The registry code seems OK, but I noticed by looking through my registry that every other application does NOT use a space in the association class, nor does this issue happen with ANY other file extension from any application installed on any machines I know of - only the ones created by my applications' VS installers. I've pasted a registry dump of the corresponding registry keys and values related to the file extensions - since MSI is proprietary I have no idea if this is all of it, but from what I know from other applications this should be everything. I've always wondered about this issue for years, but could never figure it out. I am replacing one of those old applications with a newer product soon, so this time I want to make sure there are no odd bugs like this...

这是数据(请注意,我已经在值下方用//注释指示了一些二进制字符串的文本值):

Here's the data (note that I've indicated the text values of some binary strings with a // comment below the value):

[HKEY_CLASSES_ROOT\.encxml]
"Content Type"="application/octet-stream"
@="Account Manager Encrypted XML File"

[HKEY_CLASSES_ROOT\.encxml\Account Manager Encrypted XML File]

[HKEY_CLASSES_ROOT\.encxml\Account Manager Encrypted XML File\ShellNew]

<小时>

[HKEY_CLASSES_ROOT\Account Manager Encrypted XML File]
@="Account Manager Encrypted XML File"

[HKEY_CLASSES_ROOT\Account Manager Encrypted XML File\DefaultIcon]
@=hex(2):25,00,41,00,50,00,50,00,44,00,41,00,54,00,41,00,25,00,5c,00,4d,00,69,\
  00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,5c,00,49,00,6e,00,73,00,74,00,\
  61,00,6c,00,6c,00,65,00,72,00,5c,00,7b,00,42,00,36,00,34,00,31,00,37,00,36,\
  00,30,00,42,00,2d,00,37,00,44,00,42,00,37,00,2d,00,34,00,46,00,31,00,42,00,\
  2d,00,41,00,44,00,36,00,45,00,2d,00,30,00,41,00,33,00,34,00,32,00,30,00,46,\
  00,35,00,45,00,45,00,30,00,44,00,7d,00,5c,00,5f,00,36,00,46,00,45,00,46,00,\
  46,00,39,00,42,00,36,00,38,00,32,00,31,00,38,00,34,00,31,00,37,00,46,00,39,\
  00,38,00,46,00,35,00,34,00,39,00,2e,00,65,00,78,00,65,00,2c,00,30,00,00,00

// Product code GUID is: {F7F214E9-ED37-4AE1-B0D2-93427973E60A}, which is different from below but I probably changed it at some point for some reason
// %APPDATA%\Microsoft\Installer\{B641760B-7DB7-4F1B-AD6E-0A3420F5EE0D}\_6FEFF9B68218417F98F549.exe,0

[HKEY_CLASSES_ROOT\Account Manager Encrypted XML File\shell]
@="open"

[HKEY_CLASSES_ROOT\Account Manager Encrypted XML File\shell\open]
@="&Open"

[HKEY_CLASSES_ROOT\Account Manager Encrypted XML File\shell\open\command]
@="\"C:\\Program Files\\Petroules Enterprises\\Account Manager\\AccountManager.exe\" \"%1\""
"command"=hex(7):4c,00,29,00,25,00,59,00,63,00,73,00,67,00,2d,00,4c,00,41,00,\
  28,00,30,00,64,00,66,00,34,00,36,00,75,00,5f,00,50,00,27,00,3e,00,27,00,7d,\
  00,27,00,66,00,25,00,6f,00,59,00,64,00,4b,00,69,00,48,00,74,00,7a,00,35,00,\
  21,00,55,00,2b,00,6c,00,68,00,54,00,20,00,22,00,25,00,31,00,22,00,00,00,00,\
  00

// This is a bizarre-looking value... what's up with that?
// L)%Ycsg-LA(0df46u_P'>'}'f%oYdKiHtz5!U+lhT "%1"

<小时>

[HKEY_CLASSES_ROOT\.whr]
"Content Type"="application/octet-stream"
@="Work Hours Record"

[HKEY_CLASSES_ROOT\.whr\Work Hours Record]

[HKEY_CLASSES_ROOT\.whr\Work Hours Record\ShellNew]

<小时>

[HKEY_CLASSES_ROOT\Work Hours Record]
@="Work Hours Record"

[HKEY_CLASSES_ROOT\Work Hours Record\DefaultIcon]
@=hex(2):25,00,41,00,50,00,50,00,44,00,41,00,54,00,41,00,25,00,5c,00,4d,00,69,\
  00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,5c,00,49,00,6e,00,73,00,74,00,\
  61,00,6c,00,6c,00,65,00,72,00,5c,00,7b,00,46,00,41,00,32,00,33,00,44,00,37,\
  00,36,00,34,00,2d,00,46,00,36,00,34,00,39,00,2d,00,34,00,38,00,46,00,39,00,\
  2d,00,38,00,44,00,30,00,42,00,2d,00,45,00,31,00,38,00,38,00,35,00,41,00,39,\
  00,38,00,31,00,46,00,39,00,39,00,7d,00,5c,00,5f,00,36,00,46,00,45,00,46,00,\
  46,00,39,00,42,00,36,00,38,00,32,00,31,00,38,00,34,00,31,00,37,00,46,00,39,\
  00,38,00,46,00,35,00,34,00,39,00,2e,00,65,00,78,00,65,00,2c,00,30,00,00,00

// Product code GUID: {FA23D764-F649-48F9-8D0B-E1885A981F99}, same as below
// %APPDATA%\Microsoft\Installer\{FA23D764-F649-48F9-8D0B-E1885A981F99}\_6FEFF9B68218417F98F549.exe,0

[HKEY_CLASSES_ROOT\Work Hours Record\shell]

[HKEY_CLASSES_ROOT\Work Hours Record\shell\open]
@="&Open"

[HKEY_CLASSES_ROOT\Work Hours Record\shell\open\command]
@="\"C:\\Program Files\\Petroules Enterprises\\Work Hours Calculator\\WorkHoursCalculator.exe\" \"%1\""
"command"=hex(7):28,00,5d,00,56,00,49,00,79,00,55,00,7b,00,5e,00,4e,00,3f,00,\
  26,00,68,00,48,00,7e,00,53,00,24,00,6e,00,31,00,36,00,59,00,3e,00,33,00,75,\
  00,5f,00,7d,00,47,00,26,00,70,00,79,00,75,00,78,00,38,00,4e,00,72,00,43,00,\
  6e,00,67,00,27,00,44,00,67,00,42,00,20,00,22,00,25,00,31,00,22,00,00,00,00,\
  00

// Same bizarre-looking type of value as before, but different...
// (]VIyU{^N?&hH~S$n16Y>3u_}G&pyux8NrCng'DgB "%1"

推荐答案

在 Windows Installer 中,我们使用 RegisterExtensionInfo 标准操作:

In Windows Installer we use the RegisterExtensionInfo standard action:

http://msdn.microsoft.com/en-us/library/aa371156(v=VS.85).aspx

主要使用扩展表和动词表以及与 COM 相关表的一些连接:

Which uses principally uses the Extension and Verb tables along with some joins to COM related tables:

http://msdn.microsoft.com/en-us/library/aa368571(v=VS.85).aspx(扩展表)http://msdn.microsoft.com/en-us/library/aa372487(v=VS.85).aspx(动词表)

这篇关于如何正确地将文件关联添加到 Windows 注册表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆