error etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
error etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

18 Eylül 2018 Salı

Bir DLL veya EXE derlemesinin .NET sürümünü tespit etmek


Daha önceden derlenmiş bir .NET DLL veya EXE dosyasının .NET'in hangi sürümü ile derlendiğini öğrenmenin birden fazla yolu yöntemi var.

İhtiyaç halinde internetten herhangi bir araç, program vs. arama gereksinimi olmadan bu işi çözebileceğiniz en pratik yöntem .NET Framework kurulumlarıyla birlikte gelen CorFlags.exe ismindeki araçtır.

Diskimizde emektar Everything Search programı ile arattığımızda aşağıdaki klasörlerde (her .NET Framework kurulumu ile birlikte gelen farklı versiyonlardaki CorFlags.exe) dosyaları görebiliyoruz:

CorFlags.exe dosyasının farklı versiyonlarının diskimizde bulunduğu klasörler


Bu dosyalar içinden diskimizde yüklü olan en son .NET Framework versiyonunun olduğu klasördekini aşağıdaki şekilde kullanacağız:

Cmd.Exe ile açtığımız konsol ekranında üstteki örnekte olduğu gibi komutumuzu çalıştırıyoruz

Benim bilgisayarımda dosya adını arattığımda dönen arama sonuçları aşağıdaki gibiydi:
* 32bit işletim sistemleri için:
C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\CorFlags.exe
C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\CorFlags.exe
C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.2 Tools\CorFlags.exe
C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7 Tools\CorFlags.exe
C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.1 Tools\CorFlags.exe
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\CorFlags.exe
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\CorFlags.exe

* 64bit işletim sistemleri için:
C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\x64\CorFlags.exe
C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64\CorFlags.exe
C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.2 Tools\x64\CorFlags.exe
C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7 Tools\x64\CorFlags.exe
C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.1 Tools\x64\CorFlags.exe
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\x64\CorFlags.exe
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\x64\CorFlags.exe

Benim kullandığım komut:
"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.1 Tools\x64\CorFlags.exe" test2.exe

Konsol ekranında dönen sonuç:
Microsoft (R) .NET Framework CorFlags Conversion Tool.  Version  4.7.2558.0
Copyright (c) Microsoft Corporation.  All rights reserved.

Version   : v4.0.30319
CLR Header: 2.5
PE        : PE32
CorFlags  : 0x20003
ILONLY    : 1
32BITREQ  : 0
32BITPREF : 1
Signed    : 0



Burada "Version" yazan satır bize aradığımız sonucu vermektedir. :)
Dediğim gibi sonucu birden farklı yöntemlerle de elde edebiliriz fakat harici bir araç, program kullanmadan en temiz ve kestirme yöntem bu.

Buna benzer şekilde ildasm aracı ile de açıp, publickeytoken'a bakıp bulabilirdik. O da .NET Framework kurulumlarıyla geliyor, fakat buna kıyasla az biraz daha zahmetli sayılır. :)

18 Nisan 2018 Çarşamba

Microsoft SQL Server'da 3417 Hatasını Düzeltmek

Elektrik kesintisi, database migration, fiziksel sunucu taşınması vs. gibi bir çok sebepten kaynaklı olarak sorunsuz çalışan Microsoft SQL Server servisiniz 3417 hatası vererek artık çalışmaz duruma geldiyse bu kısa yazıya bir göz atmanızda fayda var.

Hizmetler'den SQL SERVER hizmetini başlatmak istediğinizde 3417 hatasını alıyorsanız sorunu giderip hizmeti başlatmak için birkaç farklı yöntem var. Tabi bunlar biraz da hatanın sebebiyle ilişkili sayılır:


  1. DATA klasorünüz veya *.mdf dosyanızın işletim sistemi özelliklerini kontrol edin. Eğer işletim sistemi tarafından sıkıştırılmış olarak çalışıyor ise bu özelliği işaretleyen çeki kaldırdıktan sonra Sql Server hizmetini başlatmayı tekrar deneyin.
  2. DATA klasörünüz ve/veya altındaki *.mdf uzantılı fiziksel veritabanı dosyalarınızın yetkileri bozulmuş olabilir. Klasör ve/veya dosyaların özelliklerinden Güvenlik sekmesine gelerek NETWORK SERVICE kullanıcısına tam erişim yetkisi verin. Gerekiyorsa bu klasör üzerindeki, farklı kullanıcı hesaplarının erişim kısıtlarını da kaldırın ve Sql Server hizmetini başlatmayı tekrar deneyin.
  3. En nadir görünen bu üçüncü ihtimal master.mdf dosyanızın bozulmuş olma ihtimali. Bunun da çözümü var. Klasör yapısı kullanılan veritabanı versiyonuna göre farklılık gösterse de çözüm yöntemi aynı şekilde olacaktır. Örneğimizdeki veritabanında şu klasörü buluyoruz: C:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS\MSSQL\Template Data bu klasör içindeki master.mdf ve mastlog.ldf dosyalarını alıp kendi DATA klasörümüze (ki o da örneğimize göre şurada olur: C:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS\MSSQL\DATA ) kopyalıyoruz. (servisin çalışmadığını varsayarak, bu işlemden önce servisi kapatın demiyorum) Daha sonra Sql Server hizmetimizi başlatıyoruz. Sistemin çalışmaya başladığını göreceksiniz fakat içinde eski veritabanlarınızı göremeyeceksiniz. Onları da fiziksel *.mdf dosyalarını tek tek attach ederek çalışır hale getirebilirsiniz.
  4. DATA klasörünüzdeki fiziksel *.mdf dosyalarınızı yedekleyip Sql Server'ı uninstall edip akabinde tekrar kurduktan sonra yedeklediğiniz *.mdf dosyalarınızı yeni DATA klasörüne servisi durdurduktan sonra atıyoruz, servisi başlatıp hepsini tek tek attach ediyoruz.

SqlCmd -E -S SERVER -Q "BACKUP DATABASE [DbAdi] TO DISK='DbAdi.bak'"


Üstteki komut ile Windows'un komut satırından yedeklemenizi yapabilirsiniz.

Bunu Windows'un Zamanlanmış Görevleri'ne yeni bir görev olarak atayacak olursanız yedekleriniz otomatik olarak alınmış olur.

Ufak bir *.BAT dosya içine bu satırı yazarak elinizin altında her an tek tıklama ile yedek alabileceğiniz mini bir yedekleme yapısı da oluşturmanız mümkün.

Ancak 3417 hatasına karşın yeni bir DB eklediğinizde hizmeti kısa süreliğine (tabiki hastane vb. 24 saat çalışan bir ortamda değilse veritabanınız) durdurup master.mdf dosyanızı da fiziksel olarak yedekledikten sonra SqlServer hizmetini tekrar başlatmanız da ek bir önlem olacaktır.

Hatasız günler dilerim...