我的客户正在某些工作站用OpenOffice取代MS Office。我的程序使用.xml扩展名(使用开放格式)将文件导出到Excel,并使用当前关联的程序打开它(使用ShellExecute)
问题是OpenOffice没有注册与之关联的.xml扩展名。
手动关联工作正常,但我想创建一个.reg或其他东西来轻松更改设置。
我正在PC中注册并且已经进行了更改,但
"HKEY_CLASSES_ROOT\.xml"
键没有任何引用OpenOffice的内容。
协会存储在哪里?如何制作脚本来完成工作?
答案 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#中使用。