2012-01-12 93 views
6

Muszę powiązać rozszerzenie pliku, które utworzyłem ".rulog" z notepad.exe w ramach instalacji projektu instalacji dla maszyny z systemem Windows 7 (Jest tutaj, ponieważ do zapisania w rejestrze potrzebujemy uprawnień administratora).Jak uzyskać dokładną ścieżkę pliku notepad.exe w celu powiązania rozszerzenia pliku

Zasadniczo potrzebuję uzyskać programową dokładną ścieżkę do pliku notepad.exe. Teraz rozumiem, że zwykle działa w C: \ Windows \ system32. Jest to część zmiennej środowiskowej systemu PATH, więc domyślam się, że mogę przejrzeć wszystkie zmienne PATH i przetestować, czy "notepad.exe" istnieje, łącząc "notepad.exe" z bieżącą ścieżką przy użyciu File.Exists. Jednak to wydaje się bardzo niezdarne.

Zasadniczo muszę dodać wpis do

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

z wartością ścieżki notes.

Nawiasem mówiąc widzę, że .txt w:

Computer\HKEY_CLASSES_ROOT\.txt\ShellNew 

ma wartość ItemName z

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

Być może po prostu skopiować tę wartość? Czy jest to niebezpieczne? (Np. Nie istnieje).

+1

Z ciekawości, dlaczego niektórzy deweloperzy nalegać na tworzenie własnych rozszerzeń plików przyzwoitość czegoś tak prostego jak plik tekstowy? – KingCronus

+1

Z ciekawości, jeśli wiesz, że notatnik może otwierać twoje pliki, dlaczego nie użyć równoważnego istniejącego rozszerzenia pliku? – murgatroid99

+0

Jest bardzo prawdopodobne, że zostanie zapisana aplikacja, która przeszuka katalog dla tych typów plików. Mamy już .txt/.log istniejący dla innych logowań/informacji, więc jest to tylko przepis na to. – Jeb

Odpowiedz

8

Można użyć:

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

Albo jeszcze łatwiej:

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

w ten sposób, że nie ma znaczenia, który dysk OS jest włączony.

3

Kopiowanie wartości z% systemroot% powinno być w porządku. Jeśli działa na system operacyjny, powinien działać dla Ciebie!

0

idiotoodporny rozwiązanie:

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