21 Mart 2015 Cumartesi

Event ID 1309 - Exception Message Could Not Load Assembly

Merhaba;

Bu makalemde çoğu sistem yöneticisinin başına gelebilecek bir konu üzerinde duracağım. Diyelimki .Net üzerinde geliştirilen bir web sitesi var ve bu sitenin yeni versiyonunu sunucu üzerinde güncellemeye karar verdiniz. Farz edelim ki kullandığınız dll 'leri yeni versiyonda güncelleyerek sitenizi derlediniz. Ardından IIS sunucusu üzerinde publish ettiniz. Ve bir anda Windows Server application log'larında Event ID 1309 hatalarını görmeye başladınız. Kendinize şu soruyu sormaya başladınız; eski dll ve yeni dll aynı .net versiyonunu destekliyor ise neden windows server yeni dll'li load edemiyor?



IIS server, iisreset /stop ve iisreset/start komutları sonrasında (framework versiyonuna göre dizin değişkenlik gösterebilir) C:\Windows\Microsoft.NET\Framework\v.2.0.50.727\Temporary ASP.NET Files altını temizler. Fakat bu temizlik, bazı durumlarda başarılı olamayabiliyor. Bunun sebebi, Anti Virus Koruması, Windows Security Upgrade, .Net framework upgrade yada farklı bir üçüncü tür uygulamanın bu yapıyı bozması olabilir.

Bu gibi durumlarda uygulayabileceğiniz iki seçenek var. Bunlardan birincisi, iisreset /stop yapıp Temporary ASP.NET folderının içerisini temizlemek ardından iisreset /start komutunu çalıştırmak. Bu işlem sonrasında derlenen dosyaların, tekrar bu folder içerisinde oluştuğunu göreceksiniz.

İkinci yöntem ise aşağıdaki adımları takip ederek Temporary ASP.NET folder'larını silip yeniden oluşturmanız. Folder isimleri framework versiyonuna göre değişkenlik gösterebilir. Bu komutları kullandığınızda sisteminizde oluşacak olan herhangi bir sorunda sorumluluk kabul edilmemektedir. .Net versiyonunuzu kontrol edip komutlarınızı mutlaka doğru versiyonlara göre oluşturun.

iisreset /stop
rmdir /q /s "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files"
rmdir /q /s "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files"
md "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files"
md "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files"
xcacls "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files" /E /G MYMACHINE\IIS_WPG:F /Q
xcacls "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files" /E /G MYMACHINE\IIS_WPG:F /Q
iisreset /start

Dilerseniz yukarıdaki komutları bir notepad dosyasına vbs olarak kayıt edip çalıştırabilirsiniz!

Bir sonraki yazıda görüşmek üzere.


7 Mart 2012 Çarşamba

RunAs Komutunu C# code'u içerisine ekleyerek program çağırmak

Domain'lerde Admin'ler mümkün olduğunca kullanıcı yetkilerini kısıtlama yoluna giderler. Bu yüzden domain'lerde yazılan script'ler mümkün olduğunca RunAs parametresi ile çağrılır. Genelde yazılan script'lerde ya LsRunase gibi encript edilmiş password'ler kullanılır.

Bu yazımda c# ile visual studio ortamında RunAs işini yapabilecek bir exe'yi nasıl yapılandırabileceğimizi gösteren code parçasını paylaşıyor olacağım.

Bu programı kullandığınızda sisteminizde oluşacak olan herhangi bir sorunda sorumluluk kabul edilmemektedir. Parametrelerinizi dikkatli oluşturunuz.


Eklemeniz gereken referanslar

using System.Diagnostics;
using System.IO;
using System.Security;

//Code

System.Diagnostics.Process proc = new System.Diagnostics.Process();
System.Security.SecureString ssPwd = new System.Security.SecureString();

proc.StartInfo.UseShellExecute = false;
proc.StartInfo.FileName = "Çalıştıracağınız programın adını yazın";
proc.StartInfo.Domain = " buraya runas'in çalışacağı alan adını yazın";
proc.StartInfo.UserName = " buraya runas ile çalışacak olan kullanıcının adını yazın";

string password = "buraya runas ile çalışacak olan kullanıcının şifresini yazın";

for (int x = 0; x < password.Length; x++)
{
ssPwd.AppendChar(password[x]);
}

proc.StartInfo.Password = ssPwd;
proc.Start();

5 Mart 2012 Pazartesi

Txt Dosyasının İçerisinde Kelime Arama

Yazdığımız programlarda mutlaka bir text dosyasının içerisinde bir datayı bulma ihtiyacı doğmuştur. Aşağıdaki code parçasında bir text file içerisinde aradığımız kelimeyi nasıl bulabileceğinizi göstereceğim.

text dosyamızın adı deneme içeriği de aşağıdaki gibi olsun;

1245,bilgi1
1244,bilgi2

aradığımız kelime bilgi2 olsun;

//bilgi2 kelimesi , den sonra geleceğinden ayaraç olarak kullanacağımız karakteri aşağıdaki değişkene tanımlıyoruz.

char[] delimiterChars = { ',' };
int counter = 0;
string line;

// Dosyayı okumak için açıyoruz
System.IO.StreamReader file = new System.IO.StreamReader("c:\\deneme.txt");
while ((line = file.ReadLine()) != null)
{
if (line.Contains("1244"))
{
line = counter.ToString();
string line1;
using (StreamReader sr = new StreamReader("c:\\deneme.txt"))
for (int i = 0; i <= counter; i++)
{
string aranansatir = sr.ReadLine();
if (i == counter)
{
string[] words = aranansatir.Split(delimiterChars);
line1 = aranansatir;
string width = words[1].ToString();
}
}
//Console.WriteLine(counter.ToString() + ": " + line);
}

counter++;