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

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

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

我正在PC中注册并且已经进行了更改,但

"HKEY_CLASSES_ROOT\.xml" 

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

协会存储在哪里?如何制作脚本来完成工作?

有帮助吗?

解决方案

真正的关联存储在" 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 /?命令。第一种解决方案更安全。

其他提示

考虑dos命令 assoc

  

C:&gt; assoc /?   显示或修改文件扩展名   协会

     

ASSOC [.ext [= [fileType]]]

     

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

     

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

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

使用OpenOffice COM实现来代替打开文件。

这里有一个简单的例子: http://www.kalitech.fr/clients/doc/VB_APIOOo_en.html

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top