Pregunta

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

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

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 realizado, pero el

"HKEY_CLASSES_ROOT\.xml" 
La tecla

no tiene nada que haga referencia a OpenOffice.

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

¿Fue útil?

Solución

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

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

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 subclaves que se parecen a los " verbos " de lo que puede hacer al archivo. Nuevamente, 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 " abierto " .

Conclusión :

Con ese conocimiento, la forma más fácil de hacer que una asociación pueda ejecutarse en una secuencia de comandos 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 estás en XP o superior y sabes lo que haces) sobrescribe 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 mirada más profunda del comando reg add /? . La primera solución es más segura.

Otros consejos

considere el comando dos assoc :

  

C: > assoc /?   Muestra o modifica la extensión del archivo   asociaciones

     

ASSOC [.ext [= [fileType]]]

     

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

     

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

El uso de asociaciones de archivos en este caso parece ser algo incorrecto. Usted desea que su aplicación abra el archivo en OpenOffice, pero ¿qué sucede si su usuario desea dejar intacta la asociación de archivos XML? ¿Y 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 quizás esté bien (práctica de programación aún cuestionable), pero si no, entonces es algo malo.

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

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

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

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top