将扩展与程序关联的脚本
我的客户正在某些工作站用OpenOfficereplaceMS Office。 我的程序使用.xml扩展名(使用开放格式)将文件导出到Excel,并使用当前相关程序(使用ShellExecute)打开它。
问题在于OpenOffice没有注册与之关联的.xml扩展名。
手动关联工作正常,但我想做一个.reg或东西,轻松地改变设置。
我在registry中查找与已经做出的更改的PC,但是
"HKEY_CLASSES_ROOT\.xml"
键没有任何引用OpenOffice的东西。
该协会存储在哪里? 我怎样才能做脚本来完成这项工作?
真正的关联存储在"HKEY_CLASSES_ROOT\.xml"
指向的关键字中。
在我的机器上,该键的默认值是"xmlfile"
,最有可能的是你的。
那么我们来看看"HKEY_CLASSES_ROOT\xmlfile"
。 在那里你可以看到(并改变)将使用什么命令来启动该types的文件:
HKEY_CLASSES_ROOT\xmlfile\shell\open\command
Windows使用这种redirect将多个文件扩展名映射到相同的文件types,从而映射到相同的应用程序。
在"HKEY_CLASSES_ROOT\xmlfile\shell"
下面有多个子键,它们类似于你可以对文件做什么的“动词”。 同样,如果双击文件, "shell"
键的默认值决定使用这些动词中的哪一个。 在我的情况下,这是"open"
。
结论:
有了这些知识,使关联脚本最简单的方法是使用registry导出包含该更改的.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/?
命令被build议。 第一个解决scheme更安全。
考虑dos命令assoc
:
C:> assoc /? 显示或修改文件扩展名关联
ASSOC [.ext [= [fileType]]]
.ext指定将文件types与fileType关联的文件扩展名指定要与文件扩展名关联的文件types
input不带参数的ASSOC来显示当前的文件关联。 如果只用一个文件扩展名调用ASSOC,它将显示该文件扩展名的当前文件关联。 不指定文件types,命令将删除文件扩展名的关联。
在这种情况下使用文件关联似乎是错误的事情。 您希望您的应用程序在OpenOffice中打开该文件,但是如果您的用户想要不改变XML文件的文件关联? 如果他们系统上的其他东西也依赖于这种关联呢? 在这种情况下你打破了他们的制度。 如果你是IT人,那么也许这是可以的(编程实践仍然有问题),但是如果不是,那么这是一件坏事。
使用OpenOffice COM实现来打开文件。
好简单的例子在这里: http : //www.kalitech.fr/clients/doc/VB_APIOOo_en.html
我刚刚遇到这个同时寻找相同的答案。 我发现使用Windows FindExecutable API的更好的解决scheme,可以使用PInvoke从C#中使用。