Eğer siz de
benim gibi büyük WPF uygulamaların nasıl yapıldığını merak ettiyseniz
Visual Studio 2010 Beta 2’nin görsel ağaç yapısını incelemek için
Pete Blois tarafından geliştirilen
Snoop programını denemişsinizdir.Eğer denediyseniz Snoop’un Visual Studio 2010’nu algılayamadığını da farketmişsinizdir.Bu sorunun tam olarak neden kaynaklandığından emin değildim bu yüzden Snoop programının kaynak kodlarını indirdim ve kodlara biraz göz attım.Algılama sorununa sebep olan satır
IsValidProcess property’siydi.
Sisteminizde ister VS2008 ister VS2010 çalıştırın farkettiyseniz proseslerde ikisi de devenv olarak geçmektedir.Biz hangisi olduğunu oradaki açıklama kısmında görüyoruz sadece.Bu yüzden IsValidProcess property’sine devenv geldiğinde otomatikman false olarak atanıyor.Bizim burada yapmamız gereken eğer devenv VS2008 ise false olmasıdır.Property kodlarına şu satırları eklediğimizde artık sorunumuz ortadan kalkacaktır.
if (process.Id == Process.GetCurrentProcess().Id)
isValid = false;
else if (process.MainWindowHandle == IntPtr.Zero)
isValid = false;
else if (process.ProcessName.Contains("devenv")&& process.MainModule.FileVersionInfo.FileDescription.Contains("2008")){ isValid = false;}
else{
foreach (ProcessModule module in process.Modules){
if (module.ModuleName.Contains("PresentationFramework.dll") ||module.ModuleName.Contains("PresentationFramework.ni.dll")){
isValid = true;break;}}}
Yukarıdaki kırmızı ile yazılmış kod satırını yazdıktan sonra eğer çalışan proses VS2008 ise isValid’i false döndrüüyoruz.Uygulamayı çalıştırdığımızda artık Visual Studio 2010’u algıladığını görebilirsiniz.
İsterseniz uygulamanın benim tarafımdan düzenlenmiş halinin setup dosyasını
buradan indirebilirsiniz.Kolay gelsin.