问题是OpenOffice没有注册与之相关联的.xml扩展名。
手动关联可以正常工作,但我想制作一个.reg或类似的东西来轻松更改设置。
我正在查看已经进行更改的PC中的注册表,但是...
"HKEY_CLASSES_ROOT\.xml"
关键字没有任何引用OpenOffice的内容。
关联数据存储在哪里?如何编写脚本来执行此操作?
"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/?
命令进行深入了解。第一个方案更安全。
assoc
:在这种情况下使用文件关联似乎是错误的。 您希望您的应用程序在OpenOffice中打开文件,但是如果用户想保留XML文件的文件关联怎么办?如果他们系统上的其他东西也依赖于该关联,那么您会破坏他们的系统。如果您是IT人员,则可能可以(仍然是可疑的编程实践),但如果不是,则这样做是不好的。
改用OpenOffice COM实现来打开文件。
这里有一个很好的简单示例: http://www.kalitech.fr/clients/doc/VB_APIOOo_en.html
我在寻找同样的答案时偶然发现了这个。我发现使用Windows FindExecutable API可以找到更好的解决方案,可以通过PInvoke在C#中使用。