2012-01-12 58 views
6

Necesito asociar una extensión de archivo He creado ".rulog" con notepad.exe como parte de una instalación de proyecto de instalación para una máquina con Windows 7 (está aquí porque necesitamos privilegios de administrador para escribir en el registro).Cómo obtener la ruta exacta de notepad.exe para asociar una extensión de archivo

Básicamente necesito obtener mediante programación la ruta exacta de notepad.exe. Ahora, entiendo que normalmente vive en C: \ Windows \ system32. Esto es parte de la variable de entorno del sistema PATH, así que supongo que podría recorrer todas las variables PATH y probar si existe "notepad.exe" combinando "notepad.exe" con la ruta actual usando File.Exists. Sin embargo, esto se siente muy torpe.

Esencialmente tengo que añadir una entrada a

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

con el valor de la ruta de la libreta.

Por cierto que se puede ver que en .txt:

Computer\HKEY_CLASSES_ROOT\.txt\ShellNew 

tiene un valor para NombreDeElemento de

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

Tal vez yo sólo puedo copiar este valor? ¿O es esto peligroso? (Por ejemplo, no existe).

+1

Por curiosidad, ¿por qué algunos desarrolladores insisten en la creación de sus propias extensiones de archivo para la corrección algo tan simple como un archivo de texto? – KingCronus

+1

Por curiosidad, si sabe que el bloc de notas puede abrir sus archivos, ¿por qué no usar una extensión de archivo equivalente existente? – murgatroid99

+0

Es muy probable que se escriba una aplicación que buscará en el directorio estos tipos de archivos. Ya tenemos .txt/.log existente para otro registro/información, por lo tanto, esto es solo una provisión para ello. – Jeb

Respuesta

8

Se puede utilizar:

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

O incluso más fácil:

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

De esta manera no importa qué unidad del sistema operativo está encendido.

3

Copiar el valor con% systemroot% debería estar bien. Si funciona para el sistema operativo, ¡debería funcionar para usted!

0

solución a toda prueba:

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!"); 
} 
Cuestiones relacionadas