如何正确地将文件关联添加到Windows注册表?

2023-12-27

我应该将哪些数据添加到 Windows 注册表中以正确创建文件关联?

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

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

我应该注意的是HKCR\.whr and HCKR\.encxml键引用(客户管理器加密的 XML 文件和工作时间记录)中包含空格,当我在 Visual Studio 中创建关联时,我没有添加“。”到前面。也许不允许使用空格,和/或者您应该添加前缀“.”?注册表代码似乎没问题,但通过查看注册表,我注意到每个其他应用程序都不使用关联类中的空格,而且我所知道的任何计算机上安装的任何应用程序的任何其他文件扩展名也不会发生此问题 - 仅由我的应用程序的 VS 安装程序创建的。我粘贴了与文件扩展名相关的相应注册表项和值的注册表转储 - 由于 MSI 是专有的,我不知道这是否是全部,但从我从其他应用程序中了解到的情况来看,这应该是一切。多年来我一直想知道这个问题,但始终无法弄清楚。我很快就会用新产品替换其中一个旧应用程序,所以这次我想确保没有像这样的奇怪错误......

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

[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 标准操作:

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

其中主要使用 Extension 和 Verb 表以及一些与 COM 相关表的联接:

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何正确地将文件关联添加到Windows注册表? 的相关文章

随机推荐