将扩展与程序关联的脚本

我的客户正在某些工作站用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#中使用。

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