将扩展程序与程序关联的脚本

时间:2008-10-17 16:41:58

标签: file registry batch-file openoffice.org scripting

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

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

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

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

"HKEY_CLASSES_ROOT\.xml" 

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

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

4 个答案:

答案 0 :(得分: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/?命令。第一种解决方案更安全。

答案 1 :(得分:2)

考虑dos命令assoc

  

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

     

ASSOC [.ext [= [fileType]]]

     

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

     

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

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:-1)

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

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