Question

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).

Was it helpful?

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.

OTHER TIPS

Copying the value with %systemroot% should be just fine. If it works for the OS, it should work for you!

Fool-proof solution:

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!");
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top