2012-01-12 112 views
6

我需要將我創建的「.rulog」文件擴展名與notepad.exe相關聯,作爲Windows 7機器的安裝項目安裝的一部分(這是因爲我們需要管理員權限來寫入註冊表)。如何獲得notepad.exe的確切路徑以關聯文件擴展名

基本上我需要以編程方式獲得notepad.exe的確切路徑。現在,我明白它通常位於C:\ Windows \ system32中。這是PATH系統環境變量的一部分,所以我想我可以遍歷所有PATH變量,並通過使用File.Exists將「notepad.exe」與當前路徑相結合來測試「notepad.exe」是否存在。然而這感覺非常笨拙。

從本質上講,我需要一個條目用記事本的路徑的價值添加到

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

順便說一句,我可以看到,在名爲.txt:

Computer\HKEY_CLASSES_ROOT\.txt\ShellNew 

「@%SystemRoot%\system32\notepad.exe,-470」 

爲ITEMNAME值也許我可以複製這個價值?或者這是否危險?(例如不存在)。

+1

出於好奇,爲什麼一些開發商堅持打造自己的分寸文件擴展爲一個文本文件一樣簡單的東西嗎? – KingCronus 2012-01-12 17:08:37

+1

出於好奇,如果您知道記事本可以打開您的文件,爲什麼不使用等效的現有文件擴展名? – murgatroid99 2012-01-12 17:10:08

+0

很可能會編寫一個應用程序來搜索這些文件類型的目錄。我們已經有了.txt/.log現有的其他日誌記錄/信息,因此這只是一個規定。 – Jeb 2012-01-12 17:16:58

回答

8

您可以使用:

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

或者更簡單:

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

這樣,它並不重要的驅動OS上。

3

使用%systemroot%複製值應該沒問題。如果它適用於操作系統,它應該適合你!

0

防呆解決方案:

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!"); 
} 
相關問題