2009-05-01 17 views
25

Il nostro client (un'app winforms) include un browser di file. Mi piacerebbe che l'utente fosse in grado di aprire il file selezionato usando il gestore predefinito della shell. Come lo faccio? Ho letto che dovrei usare l'API Win32 piuttosto che il registro, ma preferirei una soluzione che riguardasse solo .NET.Come posso aprire un file usando il gestore predefinito della shell?

risposta

54

EDIT: più recente, la risposta più semplice.

Si può infatti utilizzare solo Process.Start(filename). Questo è specificato nella docs for Process.Start:

Avvio di un processo specificando il nome del file è simile a digitare le informazioni nella finestra di dialogo Esegui di menu Start di Windows. Pertanto, il nome del file non deve rappresentare un file eseguibile. Può essere di qualsiasi tipo di file per il quale l'estensione ha stato associato a un'applicazione installata nel sistema. Per esempio il nome del file può avere una .txt estensione se si è associato il testo file con un editor, come Blocco note, oppure può avere un .doc se avete file associated.doc con uno strumento di elaborazione testi , ad esempio Microsoft Word. Analogamente, nello stesso modo in cui la finestra di dialogo Esegui può accettare un nome file eseguibile con o senza l'estensione .exe, l'estensione .exe è facoltativa nel parametro fileName. Ad esempio, è possibile impostare il parametro fileName su "Notepad.exe" o "Blocco note".

EDIT: originale, risposta complicata:

Se si utilizza Process.Start con il file come il "eseguibile" e si specifica UseShellExecute = true sarà solo lavorare. Ad esempio:

using System; 
using System.Diagnostics; 

class Test 
{ 
    static void Main() 
    { 
     ProcessStartInfo psi = new ProcessStartInfo("test.txt"); 
     psi.UseShellExecute = true; 
     Process.Start(psi); 
    } 
} 

Che apre test.txt in Blocco note.

Infatti, UseShellExecute=true è l'impostazione predefinita, ma poiché è assolutamente necessario, mi piace specificarlo esplicitamente per renderlo più chiaro per il lettore.

+0

'Process.Start (" C: \ temp \ test.xlsx ");' apre un file xlsx *** se ** Excel è installato **. Se non installato, non lo so. – Kiquenet

6

non è sicuro se il suo ok

System.Diagnostics.Process.Start(filePath); 
2

System.Diagnostics.Process fornisce il wrapper nativo .NET attorno a shell32.ShellExecute.

Vedere PInvoke.Net per una discussione di entrambe le API e documenti MSDN su MSDN.

Problemi correlati