2010-04-14 31 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) 

Ciao a tutti,Nessuna applicazione è associata con l'eccezione file specificato

Sto ottenendo il seguente eccezione su una macchina che sto testando su quando si cerca di utilizzare Process.Start per aprire un file .csv. Penso che questo stia accadendo perché non è stata impostata alcuna associazione file per i file .csv su questa casella.

Quindi, come eviterai questa situazione?

Forza il processo. Avviare l'avvio in Blocco note? - Idealmente dovrebbe essere aperto in Excel, ma cosa fai se Excel non esiste su quel computer?

Grazie

risposta

4

Se l'applicazione dipende dall'installazione di Excel per funzionare correttamente ed efficacemente, è necessario segnalare all'utente. Cattura l'eccezione e fai apparire una notifica per dire loro del problema, ma in quella notifica dai loro un'opzione per aprirlo in un editor alternativo come il blocco note.

Tutto questo si riduce a una buona UX - informa l'utente, ma fallo in modo tale da potenziarli offrendo opzioni per continuare, piuttosto che limitarsi a fermarsi e fermarsi quando si verifica un piccolo problema come quello .

Modifica: Esegui esattamente ciò che stai facendo: non dare per scontato che abbiano Excel, potrebbero avere un altro visualizzatore/editor come OpenOffice. Qualunque cosa sia registrata a csv, lascia che faccia la cosa. Non cercare di andare a controllare l'associazione dei file da soli, la tua app potrebbe non avere (probabilmente non avrà) privilegi sufficienti per andare a fondo nel registro.

È inoltre necessario verificare altri motivi ovvi per le eccezioni, ad esempio se l'utente non dispone dei diritti per aprire il file di destinazione, ciò potrebbe essere dovuto a restrizioni poste sulla cartella o sul file stesso. Forse il file è bloccato perché è ancora aperto in un altro processo. Ci sono un sacco di motivi per cui il tuo Process.Start potrebbe fallire.

Cattura l'eccezione e, se la causa non è un'applicazione associata al file, offre loro l'opzione. Se l'utente sceglie di utilizzare Blocco note, prova ad aprire il file in Blocco note, ma fai attenzione alle eccezioni. Blocco note è una buona opzione, non mantiene un blocco sul file, ma è ancora soggetto a ACL di cartelle/file.

+0

non dipende da questo - ma per l'utente è molto più facile leggere un file CSV del genere. Come posso verificare se Excel è installato? – baron

+0

Vedere la mia modifica .... – slugster

+0

La tua risposta ha perfettamente senso. Saluti – baron

2

leggere il registro per vedere se c'è un programma associato con l'estensione del file prima di fare il Process.Start. Cerca in HKEY_CLASSES_ROOT\.csv per vedere chi è registrato per gestire quella estensione di file, se presente.

+0

e che cosa se non è associato? forza aperta nel blocco note (id dice che è abbastanza sicuro presumere che la maggior parte delle scatole xp avrebbe questo) e se c'è un'associazione - aprire con l'app associata? speriamo che sia in grado di ottenere il nome del processo dal registro abbastanza facilmente? ... – baron

+0

Se non è associato nulla per gestire il tipo di file, allora quello che si fa con esso dipende da voi - Blocco note potrebbe essere una scelta giusta. Se la tua sbirciatina nel registro indica che qualcosa è registrato per gestire il tipo di file, lascerei Process.Start gestire i dettagli della decifrazione effettiva del registro Apri verbi e quant'altro. – dthorpe

3

Se si imposta il ProcessStartInfo.ErrorDialog = true, l'utente sarà pronta con una finestra di dialogo standard di Windows: vedere here