【问题标题】:Setting up File associations设置文件关联
【发布时间】:2011-12-30 20:56:57
【问题描述】:

我正试图让 Windows 识别我的程序的文件扩展名,但运气不佳,像往常一样。

这就是我正在做的事情,请告知我在哪里或做错了什么 - 我认为我的注册表位置或命名设置不正确:

示例名称

MyProg.exe = The name of the program.
%InstallPath% = Where the program will be installed.
.ext1 = 1st File Extension.
.ext2 = 2nd File Extension.
.ext3 = 3rd File Extension.

注册表位置(我已添加到的位置)

HKEY_CLASSES_ROOT\.ext1
HKEY_CLASSES_ROOT\.ext2
HKEY_CLASSES_ROOT\.ext3

HKEY_CLASSES_ROOT\.ext1\DefaultIcon,2
HKEY_CLASSES_ROOT\.ext1\shell\open\command\%InstallPath%\MyProg.exe %1

在那之后我有点迷路了:(

文件图片

我从 XE IDE 资源菜单中添加了 3 个图标文件,并将它们命名为 2、3、4。我想如果我有一个名为 1 的图标,它会覆盖项目图标吗?

我想在从未见过我的程序的机器上使用 Inno Setup 等安装程序之前让这些工作正常(以查看安装是否完美无缺)。

我找不到任何易于遵循的指南:(

【问题讨论】:

  • 在我看来,您在接受其他question 的答案中提供了一个非常容易遵循的指南。唯一缺少的是作为参数提供给过程调用的内容(cMyFileType 在第一个实例中可能是 MyProgExt1,cMyDescription 可能是 My Program File Type 1)。将这些值连同作为扩展类型的 .ext1 放入代码而不是参数中,您将确切地看到需要按什么顺序执行的操作。
  • 我忘了!那么关于正确的图标,我是否只是按照我拥有的名称命名资源,例如 2、3、4?
  • 我不明白你最后的评论。您之前问题中的示例代码也显示了如何处理图标。
  • 别介意我又傻了,我正在关注 Inno Steup 的常见问题解答,并且我混淆了一些名称。我最后修好了:)

标签: delphi


【解决方案1】:

您设置的注册表项错误。您需要将文件扩展名与 ProgID 关联,然后将 ProgID 与您的应用关联,如下所示:

HKEY_CLASSES_ROOT\.ext1 
(Default) = "ext1File"

HKEY_CLASSES_ROOT\.ext2 
(Default) = "ext2File"

HKEY_CLASSES_ROOT\.ext3 
(Default) = "ext3File"

HKEY_CLASSES_ROOT\ext1File\DefaultIcon
(Default) = "%InstallPath%\MyProg.exe,2" 

HKEY_CLASSES_ROOT\ext1File\shell\open\command
(Default) = ""%InstallPath%\MyProg.exe" "%1""

HKEY_CLASSES_ROOT\ext2File\DefaultIcon
(Default) = "%InstallPath%\MyProg.exe,3" 

HKEY_CLASSES_ROOT\ext2File\shell\open\command
(Default) = ""%InstallPath%\MyProg.exe" "%1""

HKEY_CLASSES_ROOT\ext3File\DefaultIcon
(Default) = "%InstallPath%\MyProg.exe,4" 

HKEY_CLASSES_ROOT\ext3File\shell\open\command
(Default) = ""%InstallPath%\MyProg.exe" "%1""

阅读以下文档了解更多详情:

File Types and File Associations

仅供参考,您不应该直接将数据写入HKEY_CLASSES_ROOT。写信给HKEY_CURRENT_USER\Software\Classes 和/或HKEY_LOCAL_MACHINE\Software\Classes,这取决于您是要按用户还是机器全局注册。阅读以下文档了解更多详细信息。

HKEY_CLASSES_ROOT Key

Merged View of HKEY_CLASSES_ROOT

【讨论】:

  • 感谢您的警告,我想我可以选择为所有用户或单个用户安装,因此对于用户,我将使用 HKEY_CURRENT_USER Root 并为所有用户使用 HKEY_LOCAL_MACHINE root。谢谢雷米
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多