Search code examples
c#.netpathregistrynotepad

How to get the exact path of notepad.exe in order to associate a file extension


I need to associate a file extension I have created “.rulog” with notepad.exe as part of a setup project installation for a windows 7 machine (it’s here since we require admin privileges to write to the registry).

Basically I need to obtain programmatically the exact path of the notepad.exe. Now, I understand that it typically lives in C:\Windows\system32. This is part of PATH system environment variable, so I guess I could loop through all the PATH variables and test if “notepad.exe” exists by combining “notepad.exe” with the current path using File.Exists. However this feels very clumsy.

Essentially I need to add an entry to

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

with the value of the path of notepad.

Incidentally I can see that .txt in:

Computer\HKEY_CLASSES_ROOT\.txt\ShellNew

has a value for ItemName of

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

Perhaps I can just copy this value? Or is this dangerous?(e.g. does not exist).


Solution

  • You can use:

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

    Or even easier:

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

    That way it doesn't matter which drive the os is on.