2012-01-12 13 views
6

ファイル拡張子を関連付ける必要がありますWindows 7マシンのセットアッププロジェクトのインストールの一部としてnotepad.exeを使って ".rulog"を作成しました(これはレジストリに書き込むために管理者権限が必要なのでここにあります)。ファイル拡張子を関連付けるためにnotepad.exeの正確なパスを取得する方法

基本的にnotepad.exeの正確なパスをプログラムで取得する必要があります。さて、私はそれが通常C:\ Windows \ system32に住んでいることを理解します。これはPATHシステム環境変数の一部なので、すべてのPATH変数をループし、 "notepad.exe"が存在するかどうかテストするには、 "Notepad.exe"とFile.Existsを使って現在のパスを組み合わせてテストしてください。しかし、これは非常に不器用な感じです。

基本的に私は、メモ帳のパスの値を

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

にエントリを追加する必要があります。

ちなみに私はその.txtファイルを見ることができます:

Computer\HKEY_CLASSES_ROOT\.txt\ShellNew 

はおそらく、私は、この値をコピーすることができ

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

のItemNameのための値を持っていますか?またはこれは危険ですか(例:存在しません)。

+1

、なぜ一部の開発者は、テキストファイルのような単純なもののために、独自の可否ファイル拡張子の作成を主張するのですか? – KingCronus

+1

メモ帳があなたのファイルを開くことができることを知っていれば、同等の既存のファイル拡張子を使用してみませんか? – murgatroid99

+0

これらのファイルタイプのディレクトリを検索するアプリケーションが作成される可能性が非常に高いです。既に他のロギング/インフォメーション用に.txt/.logが存在しているので、これは単なる準備です。その場合、 ".ru.log"は依然として検索可能になります。 – Jeb

答えて

8

あなたは使用することができます。

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

あるいはさらに簡単:

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

OSがオンになっているドライブ、それは問題ではありませんその方法を。

3

%systemroot%で値をコピーするだけで問題ありません。それがOSのために働くなら、それはあなたのために働くはずです!

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