6

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

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

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

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

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

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

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

任何帮助表示赞赏。

谢谢,KS

4

2 回答 2

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”并选择“新建”...“密钥”。将键命名为您要为其定义关联的文件扩展名(包括前导句号)。
  5. 右键单击该新键并选择“新建”...“默认值”。然后,右键单击该默认值,选择“修改”。输入默认应用程序的 ProgID 以打开此类型并指定图标。您可能需要检查注册表以确定此值。例如,zip 文件的标准默认值是“CompressedFolder”。弄清楚这一点是此过程中最棘手的部分。
  6. 右键单击该新键并再次选择“新建”...“键”以创建子键。将子键命名为“OpenWithProgids”。
  7. 右键单击“OpenWithProgids”键并选择“新建”...“字符串值”。将该值命名为您定义为默认值的 ProgId。将此值保留为“空”(“名称”是“值”)。
  8. 右键单击“OpenWithProgids”键并再次选择“New”...“String Value”。这一次,将值命名为您按照自定义文件类型的说明为应用程序定义的 ProgId。
于 2016-04-04T15:53:26.557 回答
4

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

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

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

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

于 2013-04-09T16:13:25.183 回答