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. 

About the Author