2008-10-17 27 views
9

Mi cliente reemplaza a MS Office con OpenOffice en algunas estaciones de trabajo. Mi programa exporta un archivo a Excel usando la extensión .xml (usando formato abierto) y lo abre usando el programa asociado actual (usando ShellExecute)Secuencia de comandos para asociar una extensión a un programa

El problema es que OpenOffice no registra la extensión .xml asociada a él.

La asociación manual funciona bien, pero quiero hacer un .reg o algo para cambiar fácilmente la configuración.

estoy buscando en el registro en un PC con el cambio ya hecho, pero la clave

"HKEY_CLASSES_ROOT\.xml" 

no tiene nada hacer referencia a OpenOffice.

¿Dónde se almacena la asociación? ¿Cómo puedo hacer un script para hacer el trabajo?

Respuesta

17

La asociación real se almacena en la clave que apunta a "HKEY_CLASSES_ROOT\.xml".

En mi máquina, el valor predeterminado de esa clave es "xmlfile", lo más probable es que sea la misma para usted.

Así que vamos a "HKEY_CLASSES_ROOT\xmlfile". Allí se puede ver (y cambiar) el comando que va a ser utilizado para poner en marcha ese tipo de archivo:

HKEY_CLASSES_ROOT\xmlfile\shell\open\command 

Windows utiliza este tipo de redirección para asignar múltiples extensiones de archivo para el mismo tipo de archivo, y por lo tanto a la misma aplicación.

En "HKEY_CLASSES_ROOT\xmlfile\shell" hay varias claves secundarias que se asemejan a los "verbos" de lo que puede hacer con el archivo. De nuevo, el valor predeterminado de la clave "shell" decide cuál de estos verbos se usa si hace doble clic en el archivo. En mi caso, esto es "open".

Conclusión:

Con ese conocimiento, la manera más fácil de hacer una asociación de secuencias de comandos es utilizar regedit para exportar un archivo .reg que contiene ese cambio, y aplicarlo al equipo de destino con un doble clic o :

regedit /s new_xml_association.reg 

o (si está en XP o superior y sabe lo que no) se sustituye el valor actual con:

reg add "HKEY_CLASSES_ROOT\xmlfile\shell\open\command" /ve /d "path\to\program %1" 

En cualquier caso, se recomienda una observación más detallada del comando reg add/?. La primera solución es más segura.

+0

En mi pc esta puntos clave de "C: \ Archivos de programa \ Archivos comunes \ Microsoft Shared \ Office12 \ MSOXMLED.EXE"/verbo abierta "% 1" Pero tal vez esto .exe luego abra la aplicación de cálculo de OpenOffice. –

+0

Debe ser la aplicación OpenOffice Calc, si desea iniciar eso. "MSOXMLED.EXE" realmente es el editor XML de MS Office que viene con InfoPath – Tomalak

+0

No estoy seguro de si esta es la clave. Si lo elimino, el doble clic aún funciona. –

1

consideran el comando DOS assoc:

C:> Assoc /? Muestra o modifica las asociaciones de extensión de archivo

ASSOC [.ext [= [fileType]]]

.ext Especifica la extensión de archivo para asociar el tipo de archivo con fileType Especifica el tipo de archivo a asociar con el archivo de extensión

Tipo ASSOC sin parámetros para pantalla las asociaciones de archivos actuales. Si se invoca ASSOC con solo una extensión de archivo , muestra la asociación actual de archivos para esa extensión de archivo . No especifique nada para el tipo de archivo y el comando eliminará la asociación para la extensión de archivo .

+0

¿También puede cambiar la aplicación asociada? ¿Ha estado allí siempre o es nuevo en XP o algo así? Es al menos nuevo para mí ... – Tomalak

+0

"Assoc .xml" devuelve ".xml = xmlfile" "Assoc xmlfile" devuelve "xmlfile = Documento XML" No puedo seguir porque Assoc no acepta el espacio –

+0

@Eduardo Deberías poder citar el espacio. – kenny

-1

Acabo de encontrar esto mientras busco la misma respuesta. Encontré una solución mejor utilizando la API FindExecutable de Windows, que se puede usar desde C# utilizando PInvoke.

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

+0

En una investigación posterior, es mejor utilizar AssocQueryString que no requiere un archivo fíisico para la búsqueda: http: //www.pinvoke.net/default.aspx/shlwapi/AssocQueryString.html – TheCodeKing

1

Uso de las asociaciones de archivos en este caso parece que el mal que hay que hacer. Usted quiere que su aplicación abra el archivo en OpenOffice, pero ¿qué sucede si su usuario desea dejar intacta la asociación de archivos para archivos XML? ¿Qué pasa si algo más en su sistema también se basa en esa asociación? Estás rompiendo su sistema en ese caso. Si usted es la persona de TI, entonces tal vez eso esté bien (aún es una práctica de programación cuestionable), pero si no es así, es algo malo.

Utilice la implementación de OpenOffice COM para abrir el archivo.

buen ejemplo sencillo aquí: http://www.kalitech.fr/clients/doc/VB_APIOOo_en.html

Cuestiones relacionadas