Script para asociar una extensión a un progtwig

Mi cliente está reemplazando MS Office con OpenOffice en algunas estaciones de trabajo. Mi progtwig exporta un archivo a Excel usando la extensión .xml (usando formato abierto) y lo abre usando el progtwig asociado actual (usando ShellExecute)

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 una PC con el cambio ya hecho, pero el

"HKEY_CLASSES_ROOT\.xml" 

clave no tiene nada que hacer referencia a OpenOffice.

¿Dónde está almacenada la asociación? ¿Cómo puedo hacer un script para hacer el trabajo?

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

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

Así que vamos a "HKEY_CLASSES_ROOT\xmlfile" . Allí puede ver (y cambiar) qué comando se utilizará para iniciar ese tipo de archivo:

 HKEY_CLASSES_ROOT\xmlfile\shell\open\command 

Windows usa este tipo de redirección para asignar múltiples extensiones de archivo al 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 parecen a los “verbos” de lo que puede hacer con el archivo. De nuevo, el valor predeterminado de la tecla "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 forma más fácil de hacer una asociación con script es usar regedit para exportar un archivo .reg que contenga ese cambio, y aplicarlo a la computadora de destino con un doble clic o:

 regedit /s new_xml_association.reg 

o (si tiene XP o más y sabe lo que hace) sobrescriba el valor actual con:

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

En cualquier caso, una mirada más profunda en reg add/? comando es aconsejable. La primera solución es más segura.

considere el comando dos assoc :

C:> assoc /? Muestra o modifica las asociaciones de extensiones de archivos

ASSOC [.ext [= [fileType]]]

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

Escriba ASSOC sin parámetros para mostrar las asociaciones de archivos actuales. Si ASSOC se invoca 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 del archivo.

Usar asociaciones de archivos en este caso parece ser lo incorrecto. Desea 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 progtwigción cuestionable), pero si no es así, es algo malo.

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

Buen ejemplo simple aquí: http://www.kalitech.fr/clients/doc/VB_APIOOo_en.html

Me encontré con esto mientras buscaba 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