问题标签 [file-association]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
13224 浏览

windows - 如何使用 Delphi 获取与文件扩展名关联的程序名称?

我需要获取当前与当前用户的文件扩展名关联的程序的名称。如果您右键单击文件并选择属性,那么我需要的是“打开方式”行右侧的程序名称。

例如对于“.xls”,我希望能够得到答案“Microsoft Office Excel”,或者用户拥有的任何程序作为他们打开.xls 文件的默认程序。

我已经确定它不像进入 HKEY_CLASSES_ROOT 并选择它那么容易,因为它也可能在 HKEY_LOCAL_MACHINE 或 HKEY_CURRENT_USER 或 HKEY_USERS 中指定。

也许我需要知道的只是 Windows 用来确定这一点的啄食顺序以及如何到达每个位置。当然,执行此操作的 Windows API 调用将是理想的。

这是一个类似的问题: 如何使用 Delphi 从文件扩展名中获取图标和描述?但这个问题只回答了如何获取扩展程序的描述和相关程序的图标。我找不到一种方法来扩展它以获取相关程序的名称。

我正在使用 Delphi 2009,需要一个适用于 Windows XP、Vista 和 7 的解决方案。


谢谢大家的答案。

我似乎相信可执行文件的名称毕竟不在注册表中。在广泛寻找可以给出名称的 Windows API 之后,我找不到一个。

我认为 Mef 的回答是最好的。从程序的可执行文件中包含的信息中获取可执行文件的名称。


跟进:我找到了David Hefferman 对“如何使用默认文本编辑器打开文件?”的回答。为使用不同扩展的默认程序打开一个程序提供了一个极好的解决方案。

0 投票
12 回答
37703 浏览

python - Windows 没有将命令行参数传递给从 shell 执行的 Python 程序

如果我尝试将命令行参数作为 Windows 命令 shell 中的可执行命令直接执行,我将无法获取传递给 Python 程序的命令行参数。例如,如果我有这个程序(test.py):

并执行:

相比于:

我的配置有:

0 投票
2 回答
681 浏览

visual-studio-2008 - 使用 ClickOnce 注册文件关联

我想将文件扩展名与我的 ClickOnce 应用程序相关联。发布选项中有一个文件关联部分,但我无法使其工作。

0 投票
9 回答
50167 浏览

c# - 将文件扩展名与应用程序关联

我编写了一个编辑特定文件类型的程序,我想在启动时让用户选择将我的应用程序设置为此文件类型的默认编辑器(因为我不需要安装程序)。

我试图编写一个可重用的方法,通过向 HKEY_CLASSES_ROOT 添加一个密钥来为我关联一个文件(最好在任何操作系统上,尽管我正在运行 Vista),并将它与我的应用程序一起使用,但它没有似乎工作。

知道为什么它不起作用吗?一个示例使用可能是

如果我使用 regedit 执行相同操作,则使用“CurrentUser”的方法部分似乎有效,但使用我的应用程序却没有。

0 投票
1 回答
2658 浏览

installation - 将文件类型与应用程序关联时,设置注册表以控制工作目录

我将 Inno 用于安装程序,并且我想将文件类型与我的应用程序相关联:

现在,双击 .rpl 文件会启动应用程序,但工作目录似乎是 .rpl 文件所在的位置,因此应用程序由于无法加载任何数据而崩溃。是否可以设置注册表来控制文件关联的启动/工作目录以及启动的应用程序?或者我的应用程序本身是否需要能够解决这个问题?

关键是我总是希望我的 EXE 从例如 c:\Programs\MyApp 运行。如果您单击快捷方式或手动运行它,这很好。我能找到的唯一例外是,当您双击与应用程序关联的类型的文件时,Windows 会将 EXE 的工作目录设置为该文件的位置。

这一切背后的问题是我在我的 PC 上有一个开发版本,而且我还像普通用户一样安装发布的版本。我需要能够运行开发版本,而无需进入注册表并找到已安装的生产版本文件的路径。

0 投票
3 回答
546 浏览

c# - 您如何嵌入资源以便可以访问图标?

我有一个使用 VS2005 的 C# 项目。基本上我有两个图标,一个用于应用程序,一个用于与应用程序关联的文件。

我已将这些文件与应用程序相关联,并且我知道如何在注册表中设置它们的图标,但我只能将它们设置为应用程序图标,因为它似乎是唯一的外部资源。

我尝试将图标放在资源文件(.resx)中,或者作为单独的文件(.ico)在编译时编译到 exe 中,但都不起作用。

为了说明我的意思,我构建了应用程序并使用 Resource Hacker 打开它,您会注意到两个图标中只有一个,使用一个图标和一个图标组。

http://img442.imageshack.us/img442/3189/resourcesx.jpg http://img442.imageshack.us/img442/3189/resourcesx.jpg

0 投票
2 回答
3520 浏览

c++ - C++:如何为我们的应用程序正确注册和注销文件类型关联(以编程方式)

时间是您在以下位置设置文件关联:

HEY_CLASSES_ROOT\<.ext>

然而,这似乎是可能的,但不再是一个不完整的解决方案。整个注册表中还有其他关联。例如:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\KindMap HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\Extensions

以上所有,但由 HKEY_USERS\

微软添加了他们的设置默认关联控制面板小程序,它控制......什么?

我正在寻找一份白皮书,或关于以下方面的讨论:

“用 C/C++ 编写的现代 Windows XP-Windows 7 兼容应用程序应该如何注册和操作其文件关联而不干扰资源管理器、用户设置或默认关联 cpl”

编辑:我正在尝试通过更多问题进一步调查: 从 Windows 卸载时如何从其他用户帐户中删除 ProgID?

0 投票
1 回答
469 浏览

c++ - 对于 MDI 应用程序,应该做什么来代替 ddeexec?

我们一直在使用 ddeexec 注册表项来处理从资源管理器打开设计。

MSDN(大约 2/3 进入文章)表明 ddeexec 已被弃用,应用程序应改用 IDropTarget。

我不清楚的是这实际上应该如何工作..

例如,如果我有用于处理 .foo 文件的 Foo.exe,那么注册表是什么样的?

如果命令设置为明显:

然后 Foo.exe 每次用户双击时启动,或者从上下文菜单中选择打开 .foo 文件。

但是,这意味着为用户尝试启动的每个文件启动一个单独的 Foo.exe 实例。呸。

我当然可以编写自定义代码以某种方式将文件名从 Foo.exe 的第二个实例传递回 Foo.exe 的第一个实例,然后退出......但是我正在编写相当多的自定义代码。

DDE 过去通过要求已经运行的 Foo.exe 的第一个实例打开指定的文件来优雅地(足够)处理这个问题。这使得 MDI 应用程序可以轻松地巧妙地处理打开多个文档,其中每个文档都是在 Foo.exe 的一个实例中打开的。

如果不推荐使用 DDE,那么首选机制是什么?我们的应用程序作为 MDI 应用程序更有意义 - 我们当然不希望 Foo.exe 运行多个实例(这只会惹恼我们的用户)。我当然不想编写一个新的 Foo-Shim.exe 来查找 Foo.exe 的真实实例,并使用一些自定义机制将打开的文件名传递给它。(我不能只为此目的使用 Foo.exe,因为 Foo.exe 很大,加载速度很慢,并且需要一个按实例计数的激活安全代码,因此如果您在您的最大并发用户限制)。


我在 IDropTarget 中看不到任何看起来与这种(常见)场景有很大关系的东西。

有谁知道MS在这里的意图是什么?

0 投票
5 回答
5843 浏览

windows - 如何将文件扩展名关联到程序而不使其成为默认程序

我在某些系统上部署了一个小型转换工具,并希望用户能够从右键Open with菜单中运行它。但我不想更改用户与此文件类型关联的默认程序。

将文件扩展名/类型与程序相关联很容易,但是如何在不更改默认程序的情况下(当然以编程方式)做到这一点?

0 投票
4 回答
9237 浏览

macos - MacOSX - 与应用程序关联的文件扩展名 - 以编程方式

我试图让我的程序自动关联某些要由它打开的文件扩展名,但我不确定如何在 MacOSX 中做到这一点。我不是在问如何在 GUI 中将程​​序与文件扩展名相关联,我希望能够将它编程到我的程序中。