Merhaba dostlar…
Uygulamanızı, her hangi bir dosyaya sağ tıkladığınızda açılan menüye eklemek istiyorsunuz. Peki, bunu nasıl yapacaksınız? İşte, bu yazımızın konusu tam olarak bu.
Bir dosyaya sağ tıkladığınızda, o dosya ile ilgili işlem yapabilecek uygulamaları görürsünüz. Bu menüde sık kullanılan bir uygulama olarak WinRar'ı örnek gösterebiliriz. Eğer siz de, bu menüye uygulamanızı eklemek istiyorsanız; bunun anlamı, uygulamanızın bir dosya adresi ile çalışacağıdır.
Öncelikle sevgili dostlar, sağ tık menüsünü özelleştirebilmek için Registry kullanmamız gerekiyor. Bunun için Başlat/Çalıştır komut satırına regedit komutunu vererek Registry Editor'ü açalım.
Burada HKEY_CLASSES_ROOT düğümü altında, dosya uzantılarını görebiliriz "*" ya da "sln" gibi… Bizim örnek uygulamamızın tüm dosyalar için geçerli olacağını düşünürsek, istediğimiz registryKey'leri ve bunların değerlerini, "*" düğümünün altında bulunan "Shell" düğümü içine eklemeliyiz.
Ben; resimdeki örnekte, "Test" isimli bir Key ekledim. Bu Key'in değeri, menüde gösterilecek olan uygulama ismidir. Burada dikkat ederseniz Test düğümünün hemen altında, Command isimli bir düğüm daha var. İşte bu düğümde, uygulamanızı açmak üzere gönderilecek parametreyi belirtmelisiniz.
Burada gördüğünüz %L parametresi sağ tıklamış olduğunuz dosyanın adresini, uygulamanıza göndermenizi sağlayacak olan parametredir.
Buraya kadar aktardığım registry işlemlerini elbette manüel olarak yapmayacağız. Uygulamamızın setup dosyasında bu işlemler otomatik olarak yapılıyor olmalı.
Bu durumda, öncelikle projemize bir Installer class ekleyelim.
Bu class'ın AfterInstall olayına aşağıdaki kodu yazarak, uygulamanız kurulduktan hemen sonra, gerekli registry ayarlarının yapılmasını sağlamalıyım:
using Microsoft.Win32;
…
…
private void Installer1_AfterInstall(object sender, InstallEventArgs e)
{
RegistryKey reg = Registry.ClassesRoot.CreateSubKey("*\\Shell\\Test");
reg.SetValue(String.Empty, "Benim uygulamam");
RegistryKey command = Registry.ClassesRoot.CreateSubKey("*\\Shell\\Test\\Command");
command.SetValue(string.Empty, Application.StartupPath + "\\test.exe %L");
command.Close();
reg.Close();
}
Buraya kadar tamam. Yalnız, uygulamanız; sağ tıklanan dosyanın adresini nasıl alacak (haha ipucunu az önce verdim…)? Parametre ile tabii ki, bu parametreyi alabilmek için Program.cs içindeki Main() metodunu değiştirmeniz gerekmektedir.
Demek ki; dosya adresi önce main() metoda ulaşacak. Oradan ana Form'a taşıyacak olan sizsiniz elbet. Ben bu taşıma işlemi için bir class kullanmayı uygun buldum:
public class FilePathObj
{
public static string FilePath { get; set; }
}
Sonra da main() metodu değiştirdim:
/*
* Uygulamanızın, sağ tıklanan dosyanın fiziksel adresini alabilmesi için, main metodunuz parametre olarak string dizisi almalıdır.
*/
static void Main(string[] args)
{
/*
* burada dikkat edilmesi gereken bir şey var; Dosya adı, boşluklara göre ayrılarak args string dizisinin elemanları haline gelir.
* Örneğin "C:\Deneme Dosyası.txt" adresli bir dosyanın durumu şöyle olacaktır:
* args[0] = "C:\Deneme"
* args[1] = "Dosyası.txt"
*
* Bu nedenle:
*/
string filePath = string.Empty;
foreach (string s in args )
{
filePath += s;
}
FilePathObj.FilePath = filePath;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
İşte, uygulama tarafında yapmanız gerekenler bunlar. Sıra geldi Setup projesine. Normal şartlarda Setup projesinde yapmanız gereken ayarlamaları yaptıktan sonra; küçük bir ayar daha yapmamız gerekiyor. Installer classının AfterInstall olayına yazdığımız kodda Application.StartupPath özelliğini kullanmıştım. Bir uygulamayı debug ederken StartupPath özelliği size "..\..\bin\" klasörünün yerini verirken, setup sonrasında, bu klasör C:\Windows\System32 olur. Bu nedenle, Setup esnasında File Sytem kısmında System klasörünü eklemelisiniz. Bu işlemden sonra, eklediğiniz System klasörü içine Primary Output dosyanızı eklemelisiniz.
Tamamdır. Artık Setup dosyanızı test edebilir ve sonucu görebilirsiniz:
İşte hepsi bu. Kendinize iyi bakın
Soru ve istek için: turkay@turkayurkmez.com
Tags: microsoft.win32, registry, setup, installer, startuppath