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

File io 如何使用InstallShield添加Windows文件类型关联?,file-io,installshield,file-association,File Io,Installshield,File Association,我编写了一个应用程序来接受一个filepath(具有自定义扩展名的文件)作为参数,然后对其进行一些处理 我的想法是,我可以(使用windows功能)将自定义文件与我安装的可执行应用程序相关联(通过install shield installer) 我希望能够双击具有自定义扩展名的文件,并将其传递给我的可执行文件进行处理 然而,我的行为是: 如果我双击我的文件(带有自定义扩展名),它什么也不做 如果我将文件拖放到我的可执行程序上,那么它将按预期工作 那么,只需双击我的自定义文件就可以实现这一点

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

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

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

然而,我的行为是:

  • 如果我双击我的文件(带有自定义扩展名),它什么也不做
  • 如果我将文件拖放到我的可执行程序上,那么它将按预期工作
那么,只需双击我的自定义文件就可以实现这一点吗

我猜windows正在尝试使用可执行文件打开自定义文件,这可能与将其作为参数传入不同

谢谢你的帮助

谢谢,
KS

无论您的安装方法是什么(installscript、MSI等),基本上都需要创建几个HKEY_类的根条目。根据您的方法,有不同的方法进行安装(例如,在installshield创建的MSI安装程序中,如果您遵循以下步骤,它还可以在您的应用程序检测到问题时触发安装修复

您需要的根:(我们将假装您的扩展名是.xyz)

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

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

    使用installshield 2013:

    用于自定义文件类型

  • 切换到“安装设计器”选项卡
  • 在左侧的框架中,展开“组织”并选择“组件”
  • 从组件列表中,展开主exe的选项,然后展开“高级设置”并选择“文件类型”
  • 右键单击“扩展”并选择“新建扩展”。输入不带前置期间的扩展
  • 您的扩展名应该在创建时自动添加“动词”“打开”。选择该选项。输入“显示名称”,例如“&使用MyApp打开”。输入“参数”,例如“%1”(将文件名传递给以引号括起来的exe,以处理长文件名/空格)
  • 从列表中选择新扩展名,然后为其键入“ProgID”。例如,“MyApp.Document”
  • 要定义与类型关联的特定图标(而不是隐式exe图标),请执行以下操作:

  • 单击您添加的“ProgID”(“MyApp.Document”或其他内容)。单击“图标”字段,然后单击出现的“…”按钮。这将允许您浏览到图标文件
  • 对于“通用”文件类型

    如果某个文件类型不完全“属于”您的应用程序,您可能希望将您的应用程序添加到打开该类型的选项列表中,但不将其设置为默认程序或更改默认图标。以下是如何实现此目的

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

  • 您使用的是什么安装技术(MSI或InstallScript)以及您尝试将扩展与程序关联的内容?您可能只是缺少一个
    %1“
    ,但您的描述不足以让我告诉您。您好,我右键单击该文件并将其与可执行文件关联。好的,现在注册表中的所有内容都已设置好,双击我的文件时,我收到以下错误:“参数不正确”。有什么建议吗?它现在可以正常工作了:P