如何使用InstallShield添加Windows文件类型关联?

Per*_*xed 5 file-io installshield file-association

我编写了一个应用程序来接受文件路径(带有自定义扩展名的文件)作为参数,然后对其进行一些处理。

我的想法是,我可以将自定义文件与我安装的可执行应用程序关联(使用Windows功能)(通过install shield安装程序)。

我希望能够双击带有自定义扩展名的文件,并将其传递给我的可执行文件进行处理。

但是,我得到的行为是这样的:

  • 如果我双击我的文件(带有自定义扩展名),则不会执行任何操作。
  • 如果将文件拖放到我的可执行程序上,则它将按预期工作。

那么是否可以通过双击我的自定义文件来使其工作?

我猜想Windows正在尝试使用可执行文件打开自定义文件,这可能与将其作为参数传递的方式不同吗?

任何帮助表示赞赏。

谢谢,KS

Buv*_*inJ 5

使用 InstallShield 2013:

对于自定义文件类型

  1. 切换到“安装设计器”选项卡。
  2. 在左侧的框架中,展开“组织”并选择“组件”。
  3. 从组件列表中,展开主要 exe 的选项,然后展开“高级设置”并选择“文件类型”。
  4. 右键单击“扩展”并选择“新建扩展”。输入没有前导句点的扩展名。
  5. 您的扩展程序应该在您创建它时自动为其添加“动词”“打开”。选择那个。输入“显示名称”,例如“&Open with MyApp”。输入“参数”,例如“%1”(将文件名传递给用引号括起来的 exe 以处理长文件名/空格。)
  6. 从列表中选择您的新扩展,然后为它输入“ProgID”。例如,“MyApp.Document”。

要定义与类型关联的特定图标(而不是隐式 exe 图标):

  1. 单击您添加的“ProgID”(“MyApp.Document”或其他)。单击“图标”字段,然后单击出现的“...”按钮。这将允许您浏览到一个图标文件。

对于“通用”文件类型

如果文件类型不“专属”于您的应用程序,您可能希望将您的应用程序添加到打开该类型的选项列表中,但不要将其设为默认程序或更改默认图标。这是实现这一目标的方法...

  1. 切换到“安装设计器”选项卡并按照自定义文件类型的说明进行操作
  2. 在左侧的框架中,展开“组织”并选择“组件”。
  3. 从组件列表中,展开主要 exe 的选项,然后选择“注册表数据”。
  4. 在“目标计算机框架”中,右键单击“HKEY_CLASSES_ROOT”并选择“新建”...“密钥”。将密钥命名为要为其定义关联的文件扩展名(包括前导 peroid)。
  5. 右键单击该新键并选择“新建”...“默认值”。然后,右键单击该默认值,选择“修改”。输入应该是默认应用程序的 ProgID 以打开此类型并指定图标。您可能需要检查注册表以确定此值。例如,zip 文件的标准默认值是“CompressedFolder”。弄清楚这一点是这个过程中最棘手的部分。
  6. 右键单击该新键并再次选择“新建”...“键”以创建子键。将子键命名为“OpenWithProgids”。
  7. 右键单击“OpenWithProgids”键并选择“新建”...“字符串值”。将该值命名为您定义为默认值的 ProgId。将此值保留为“空”(“名称”即为“值”)。
  8. 右键单击“OpenWithProgids”键并再次选择“新建”...“字符串值”。这一次,将值命名为您按照自定义文件类型的说明为应用程序定义的 ProgId。


NGa*_*ida 4

无论您的安装方法是什么(安装脚本、MSI 等),您基本上都需要创建一些 HKEY_CLASSES_ROOT 条目。根据您的方法,有不同的方法来解决这个问题(例如,在由 installshield 创建的 MSI 安装程序中,如果您遵循指南,也可以在检测到存在问题时触发应用程序的安装修复。

不过,您需要的根目录:(我们假设您的扩展名是 .xyz)

  1. 在 HKCR 下创建一个名为“.xyz”的新密钥(您可以在这里看到许多其他密钥,例如
  2. 在默认值中,将数据设置为某个名称,其含义类似于“myapp.xyz”
  3. 创建一个名为“myapp.xyz”的新 HKCR 密钥以匹配您在 2 中创建的密钥
  4. 在默认值中,将数据设置为描述性标签。例如“我的应用程序数据文件”
  5. 创建一个名为 shell 的子项(您可以将此处的默认值设置为“open”,这将使 open 成为资源管理器中的默认操作)
  6. 创建一个名为 open 的子项
  7. 创建一个名为command的子项
  8. 在命令键的默认值中,将值设置为“c:\path\to\installfolder\appname.exe”“%1” (请注意此实例中的所有引号都很重要)
  9. 您还可以在“myapp.xyz”下创建一个名为 DefaultIcon 的子项,它指向将与资源管理器中的扩展程序关联的图标文件。

如果您使用 installshield,上面的很多操作都会为您完成;尽管我过去不得不对其进行调整,以使其与具有多种文件格式的更复杂的应用程序中所需的输出相匹配。