2012-01-12 16 views
6

Ho bisogno di associare un'estensione di file che ho creato ".rulog" con notepad.exe come parte di un'installazione di progetto di installazione per una macchina Windows 7 (è qui poiché abbiamo bisogno dei privilegi di amministratore per scrivere nel registro).Come ottenere il percorso esatto di notepad.exe per associare un'estensione di file

Fondamentalmente ho bisogno di ottenere a livello di programmazione il percorso esatto del notepad.exe. Ora, capisco che in genere vive in C: \ Windows \ system32. Questo fa parte della variabile di ambiente del sistema PATH, quindi suppongo di poter scorrere tutte le variabili PATH e verificare se "notepad.exe" esiste combinando "notepad.exe" con il percorso corrente utilizzando File.Exists. Tuttavia questo sembra molto maldestro.

In sostanza ho bisogno di aggiungere una voce alla

Computer\HKEY_CLASSES_ROOT\.rulog\shell\open\command\ 

con il valore del percorso del blocco note.

Per inciso mi rendo conto che in txt:

Computer\HKEY_CLASSES_ROOT\.txt\ShellNew 

ha un valore per ItemName di

“@%SystemRoot%\system32\notepad.exe,-470” 

Forse posso basta copiare questo valore? O è pericoloso? (Per esempio non esiste).

+1

Per curiosità, perché alcuni sviluppatori insistono sulla creazione di proprie estensioni di file proprietà per qualcosa di semplice come un file di testo? – KingCronus

+1

Per curiosità, se sai che il blocco note può aprire i tuoi file, perché non utilizzare un'estensione di file esistente equivalente? – murgatroid99

+0

È molto probabile che venga scritta un'applicazione che cercherà nella directory questi tipi di file. Abbiamo già .txt/.log esistente per altre registrazioni/informazioni, quindi questo è solo un provvedimento per questo. – Jeb

risposta

8

È possibile utilizzare:

Environment.GetEnvironmentVariable("windir") + "\\system32\\notepad.exe"; 

O ancora più semplice:

Environment.SystemDirectory + "\\notepad.exe"; 

In questo modo non importa quale unità il sistema operativo è in funzione.

3

La copia del valore con% systemroot% dovrebbe essere perfetta. Se funziona per il sistema operativo, dovrebbe funzionare per te!

0

soluzione infallibile:

string NotepadPath = Environment.SystemDirectory + "\\notepad.exe"; 
if (System.IO.File.Exists(NotepadPath)) 
{ 
    Microsoft.Win32.Registry.SetValue("HKEY_CLASSES_ROOT\\.rulog\\shell\\open\\command\\", "", NotepadPath + " %1"); 
} 
else 
{ 
    //do something else or throw new ApplicationException("Notepad not found!"); 
} 
Problemi correlati