2010-04-14 28 views
6
UnhandledException: System.ComponentModel.Win32Exception: No application is associated with the specified file for this operation 
    at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo) 
    at System.Diagnostics.Process.Start() 
    at System.Diagnostics.Process.Start(ProcessStartInfo startInfo) 
    at System.Diagnostics.Process.Start(String fileName) 

Hola a todos,Ninguna aplicación está asociada con la excepción de archivos especificado

estoy recibiendo la siguiente excepción en una máquina que estoy probando en al intentar utilizar Process.Start para abrir un archivo .csv. Creo que esto está sucediendo porque no se ha establecido una asociación de archivos para archivos .csv en este cuadro.

Entonces, ¿cómo evitarías esta situación?

Forzar el proceso. ¿Iniciar para abrir en el Bloc de notas? - Lo ideal sería que se abra en Excel, pero ¿qué haces si Excel no existe en esa computadora?

Gracias

Respuesta

4

Si su aplicación depende de la instalación de Excel para que funcione correctamente y de manera efectiva, entonces el usuario no debe informar al respecto. Captura la excepción y muestra una notificación para informarles sobre el problema, pero luego en esa notificación, dales la opción de abrirlo en un editor alternativo como el bloc de notas.

Todo esto se reduce a un buen UX: dígaselo al usuario, pero hágalo de tal manera que los fortalezca ofreciéndoles opciones para continuar, en lugar de simplemente interponerse en su camino y detenerse cuando se produce un pequeño problema como ese. .

Editar: Haz exactamente lo que estás haciendo - no asumas que tienen Excel, pueden tener algún otro visor/editor como OpenOffice. Lo que está registrado en csv, deja que lo haga. No intentes ir a comprobar la asociación de archivos tú mismo, es posible que tu aplicación (probablemente no tenga) privilegios suficientes para ir a buscar en el registro.

También debe comprobar por otras razones obvias para las excepciones, como que el usuario no tiene derechos para abrir el archivo de destino, esto podría deberse a restricciones colocadas en la carpeta o el archivo en sí. Tal vez el archivo esté bloqueado porque todavía está abierto en otro proceso. Hay un montón de razones por las cuales su Process.Start podría fallar.

Captura la excepción, y si la causa no es una aplicación asociada al archivo, ofrézcales la opción. Si el usuario elige usar el Bloc de notas, intente abrir el archivo en el Bloc de notas, pero tenga cuidado con las excepciones. El Bloc de notas es una buena opción, no mantiene un bloqueo en el archivo, pero todavía está sujeto a ACL de carpeta/archivo.

+0

no depende de eso, pero para el usuario es mucho más fácil leer un archivo CSV como ese. ¿Cómo puedo verificar si Excel está instalado? – baron

+0

Ver mi edición ... – slugster

+0

Su respuesta tiene mucho sentido. Aclamaciones – baron

2

leer el registro para ver si hay un programa asociado a la extensión del archivo antes de hacer la Process.Start. Busque en HKEY_CLASSES_ROOT\.csv para ver quién está registrado para manejar esa extensión de archivo, si corresponde.

+0

y lo que si no se asocia? forzar abrir en el bloc de notas (es decir, es bastante seguro suponer que la mayoría de los cuadros xp tendrían esto) y si hay asociación: ¿abrir con la aplicación asociada? ¿es posible que pueda obtener el nombre del proceso fuera del registro con la suficiente facilidad? ... – baron

+0

Si no se asocia nada para manejar el tipo de archivo, entonces lo que haga con él depende de usted: el Bloc de notas podría ser una buena opción. Si su vistazo al registro indica que algo está registrado para manejar el tipo de archivo, dejaría que Process.Start maneje los detalles de realmente descifrar el registro Open verbs y what else. – dthorpe

3

Si se establece el ProcessStartInfo.ErrorDialog = true, el usuario será rápido con un cuadro de diálogo estándar de Windows: ver here

Cuestiones relacionadas