2012-01-12 13 views
6

Bir windows 7 makine için bir kurulum proje yüklemesinin parçası olarak notepad.exe ile oluşturduğum bir dosya uzantısını ".rulog" ile ilişkilendirmem gerekiyor (Kayıt defterine yazmak için yönetici ayrıcalıklarına ihtiyaç duyduğumuz için buradayız).Bir dosya uzantısını ilişkilendirmek için notepad.exe dosyasının tam yolu nasıl gidilir?

Temel olarak, notepad.exe dosyasının tam yolunu program aracılığıyla edinmem gerekiyor. Şimdi, bunun genelde C: \ Windows \ system32'de yaşadığını anlıyorum. Bu, PATH sistem ortamı değişkeninin bir parçasıdır, bu yüzden tüm PATH değişkenlerini değiştirebilirim ve “notepad.exe” yi File.Exists kullanarak geçerli yolla birleştirerek “notepad.exe” mevcutsa test edebilirim. Ancak bu çok beceriksiz hissediyor.

Esasen ben not defteri yolunun değeri ile

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

bir giriş eklemeniz gerekir. Belki de sadece bu değeri kopyalayabilirsiniz

Computer\HKEY_CLASSES_ROOT\.txt\ShellNew 

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

ait ITEMNAME için bir değer vardır:

arada ben o .txt görebilir? Yoksa bu tehlikeli midir? (Ör. Yok).

+1

, neden bazı geliştiriciler bir metin dosyası gibi basit bir şey için kendi yerindelik dosya uzantıları oluşturmaya ısrar ediyorsun? – KingCronus

+1

Merak etme, not defterinin dosyalarınızı açabileceğini biliyorsanız, neden eşdeğer bir dosya uzantısı kullanmıyorsunuz? – murgatroid99

+0

Büyük olasılıkla bu dosya türleri için dizini arayacak bir uygulama yazılacak. Zaten diğer günlüğe kaydetme/bilgi için mevcut .txt/.log var. Bu nedenle, bunun için bir hüküm. – Jeb

cevap

8

Sen kullanabilirsiniz:

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

Ya da kolay:

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

os açık sürücü fark etmez Bu şekilde.

3

Değeri% systemroot% ile kopyalamak iyi olur. İşletim sistemi için çalışıyorsa, sizin için çalışmalıdır!

0

Fool geçirmez çözüm: meraktan

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