11

我的客户正在某些工作站中用 OpenOffice 替换 MS Office。我的程序使用 .xml 扩展名(使用开放格式)将文件导出到 Excel,并使用当前关联的程序(使用 ShellExecute)打开它

问题是 OpenOffice 没有注册与其关联的 .xml 扩展名。

手动关联工作正常,但我想制作一个 .reg 或其他东西来轻松更改设置。

我正在查看已经进行更改的 PC 中的注册表,但是

"HKEY_CLASSES_ROOT\.xml" 

key 没有任何引用 OpenOffice 的内容。

关联存储在哪里?我怎样才能制作一个脚本来完成这项工作?

4

4 回答 4

17

真正的关联存储在"HKEY_CLASSES_ROOT\.xml"指向的键中。

在我的机器上,该键的默认值说"xmlfile",很可能与您的相同。

所以让我们去吧"HKEY_CLASSES_ROOT\xmlfile"。在那里您可以看到(并更改)将用于启动该类型文件的命令:

HKEY_CLASSES_ROOT\xmlfile\shell\open\command

Windows 使用这种重定向将多个文件扩展名映射到同一个文件类型,从而映射到同一个应用程序。

下面"HKEY_CLASSES_ROOT\xmlfile\shell"有多个子键,类似于您可以对文件执行的操作的“动词”。"shell"同样,如果您双击文件,则键的默认值决定使用这些动词中的哪一个。就我而言,这是"open".

结论:

有了这些知识,使关联可编写脚本的最简单方法是使用 regedit 导出包含该更改的 .reg 文件,然后通过双击将其应用到目标计算机,或者:

regedit /s new_xml_association.reg

或者(如果您使用的是 XP 或更高版本并且知道自己在做什么)使用以下命令覆盖当前值:

reg add "HKEY_CLASSES_ROOT\xmlfile\shell\open\command" /ve /d "path\to\program %1"

无论如何,reg add/?建议对指挥进行更深入的研究。第一种解决方案更安全。

于 2008-10-17T16:47:06.823 回答
2

考虑 dos 命令assoc

C:>关联/?显示或修改文件扩展名关联

ASSOC [.ext[=[fileType]]]

.ext 指定将文件类型与 fileType 关联的文件扩展名 指定与文件扩展名关联的文件类型

键入不带参数的 ASSOC 以显示当前文件关联。如果仅使用文件扩展名调用 ASSOC,它将显示该文件扩展名的当前文件关联。不为文件类型指定任何内容,该命令将删除文件扩展名的关联。

于 2008-10-17T17:03:25.107 回答
1

在这种情况下使用文件关联似乎是错误的做法。希望您的应用程序在 OpenOffice 中打开文件,但如果您的用户希望保持 XML 文件的文件关联不变,该怎么办?如果他们系统上的其他东西也依赖于该关联怎么办?在这种情况下,您正在破坏他们的系统。如果您是 IT 人员,那么也许可以(仍然值得怀疑的编程实践),但如果不是,那么这是一件坏事。

请改用 OpenOffice COM 实现来打开文件。

这里的简单示例: http ://www.kalitech.fr/clients/doc/VB_APIOOo_en.html

于 2012-09-18T17:32:39.463 回答
-1

我只是在寻找相同的答案时遇到了这个问题。我使用 Windows FindExecutable API 找到了一个更好的解决方案,可以使用 PInvoke 从 C# 中使用它。

http://www.pinvoke.net/default.aspx/shell32.findexecutable

于 2010-09-15T15:39:51.170 回答