Merhaba arkadaşlar,
C# .NET 4.5'da geliştirdiğim bir Kurulum uygulamasıyla ilgili olarak; Async BackgroundWorker kullanmaktayım ve içerisinde Download,Process.Run işlemleri mevcuttur.
Tam olarak nedenini bulamadığım birkaç sorundan dolayı Bazı bilgisayarlarda BackgroundWorker çalışmaktayken Bazı bilgisayarlarda çalışmıyor. Permission tarzı bir durum mudur yoksa başka bir etkeni varmıdır. Çözemedim Async olmasından kaynaklı olabilir mi, İşlemcinin Async işlemi yerine getirememe durumu v.s.
Proje içerisinde olup bitenler; 1- MySQL'e bağlanmak veri yollamak.(ÇALIŞIYOR) 2- Klosör oluşturmak - (ÇALIŞIYOR) 3- Ortam değişkenlerine ve Regedit'e veri yazmak. (Çalışıyor) 4- Restart kontrlü (ÇALIŞIYOR) 5- Dosya İndirmek (bgWorker ile yapıyorum. Herzaman çalışmıyor) 6- Zip Çözmek (bgWorker ile yapıyorum. Herzaman çalışmıyor) 7- Masaüstüne simge oluşturmak. (bgWorker ile yapıyorum. Herzaman çalışmıyor) 8- SQL Kurmak amacıyla Dosya çalıştırmak (bgWorker ile yapıyorum. Herzaman çalışmıyor) 9- FTP'e bağlanmak Dosya çekmek (bgWorker ile yapıyorum. Herzaman çalışmıyor) 10- Firewall'e Port eklemek (bgWorker ile yapıyorum. Herzaman çalışmıyor)
Kısaca bazı kodlar private async void DoWork_KurulumBasla(object sender, DoWorkEventArgs e) { #region ÖN TANIM / GEÇİCİ DOSYA KONTRLÜ
try
{
Diger.Logla("bg*İşlem-> GeciciKlasorVarmi(" + TANIMLAR.GeciciDizin + ")");
bool GeciciKlosurVarmi = Directory.Exists(@TANIMLAR.GeciciDizin);
if (!GeciciKlosurVarmi) Directory.CreateDirectory(TANIMLAR.GeciciDizin);
Diger.Logla("bg*T-> GeciciKlasorVarmi("+TANIMLAR.GeciciDizin+")");
}
catch (Exception ex)
{
ItemBilgiDegistir(clist_Kurulum.Items[0], "HATA:" + TANIMLAR.GeciciDizin + " Oluşturulamadı. " + ex.Message, IslemTip.YAZI);
Calisiyor = false;
Diger.DurumMailGonder(ex.Message);
Diger.Logla("bg*Hata-> GeciciKlasorVarmi("+TANIMLAR.GeciciDizin+") -> " + ex.Message + ex.InnerException);
return;
}
#endregion
Diger.Logla("bg*İşlem-> WinIceberg_IndirKur(InternettenIndirilecek)");
try
{
#region InternetVarmi
try
{
clsSplash.EkraniCagir(sf.SplashScreenCommand.BaslikDegistir, "İnternet Kontrol Ediliyor...");
if (!Diger.InternetVarmi())
{
clsSplash.EkraniKapat();
ItemBilgiDegistir(clist_Kurulum.Items[0], "HATA: Internet Yok.", IslemTip.YAZI);
Diger.Logla("bg/clsSplash*Hata-> InternetYok");
Calisiyor = false;
return;
}
else
{
clsSplash.EkraniKapat();
Diger.Logla("bg/clsSplash*Tamam-> InternetVar");
}
}
catch (Exception ex)
{
Diger.Logla("bg*Hata-> InternetVarmi() " + ex.Message + ex.InnerException);
}
#endregion
ItemBilgiDegistir(clist_Kurulum.Items[0], true, IslemTip.EVETHAYIR);
if (AnaDegiskenler.WINICEINDIR)
{
DosyaIndirmeSonucu = await Dosyalari_Indir(TANIMLAR.DosyaAdi, "WinIceberg.Zip", TANIMLAR.GeciciDizin + @"\\WinIceberg.Zip", "Dosya İndiriliyor");
if (DosyaIndirmeSonucu)
{
ItemBilgiDegistir(clist_Kurulum.Items[0], "Orka SQL İndirildi", IslemTip.YAZI);
ItemBilgiDegistir(clist_Kurulum.Items[0], "On", IslemTip.CHECKSTATE);
}
}
}
catch (Exception ex)
{
Diger.Logla("bg*Hata-> Dosyalari_Indir()" + ex.Message + ex.InnerException);
}
#region #FireWall Ayarları
try
{
Invoke_DegerYolla(pg_orkakur, "Description", "Güvenlik Duvarı Ayarları yapılıyor.");
Diger.FireWallAyarla(txt_serveradi.Text);
Invoke_DegerYolla(pg_orkakur, "Description", "Güvenlik Duvarı Ayarları yapıldı.");
Diger.Logla("bg*T-> FireWallAyarla()");
}
catch (Exception Hata)
{
MessageBox.Show("HATA: Firewall" + Hata.Message);
Diger.DurumMailGonder("HATA: Firewall" + Hata.Message);
Diger.Logla("bg*Hata->FireWallAyarla() ->" + Hata.Message + Hata.InnerException);
}
int BaslamaID = SQLKurulumBasla(SQLKurulacakDosyaAdi);
var Kurulum_State = Process.GetProcessById(BaslamaID);
if (Kurulum_State != null)
Kurulum_State.WaitForExit();
ItemBilgiDegistir(clist_Kurulum.Items[3], "SQL SERVER Kuruldu.", IslemTip.YAZI);
Invoke_DegerYolla(pg_orkakur, "Description", "SQL SERVER Kuruldu...");
clsSplash.EkraniKapat();
------------ BGWORKERİN BİR KISMI SON BGWORKERDA ÇALIŞAN BİRKAÇ KOD.. SÜPHELENDİĞİM
public int SQLKurulumBasla(String DosyaAdi)
{
try
{
Islem.StartInfo.FileName = @DosyaAdi;
string[] Parca = new String[] { "1", "2" };
Parca[0] = @"/SAPWD=" + "" + txt_saSifre.Text + "";
Parca[1] = " /SkipRules=RebootRequiredCheck /SECURITYMODE=SQL /FEATURES=SQLENGINE,SSMS /IACCEPTSQLSERVERLICENSETERMS /Action=Install /Q /ERRORREPORTING=1 /INSTANCENAME=" + txt_serveradi.Text + " /ConfigurationFile=" + TANIMLAR.GeciciDizin + "ConfigurationFile.INI";
Islem.StartInfo.Arguments = Parca[0] + Parca[1];
Islem.StartInfo.UseShellExecute = true;
Islem.StartInfo.Verb = "runas";
Islem.Start();
Diger.Logla("SQLKurulumParametreleri -> \\n: " + Islem.StartInfo.FileName + Islem.StartInfo.Arguments);
return Islem.Id;
}
catch (Exception ex)
{
MessageBox.Show("HATA: SQL Kurulum Basla -" + ex.Message);
Diger.Logla("H-> SQLKurulumBasla(String DosyaAdi):" + ex.Message + ex.InnerException);
return 0;
}
}
-----------
private async Task<bool> Dosyalari_Indir(string Adres,string GelenDosyaAdi,string DosyaKonumu,string Aciklama) { ServicePointManager.DefaultConnectionLimit = 20; try {
WebClient webClient = new WebClient();
webClient.OpenRead(Adres);
long WebDosyaBoyutu = Convert.ToInt64(webClient.ResponseHeaders["Content-Length"]);
if (System.IO.File.Exists(DosyaKonumu))
{
long DosyaBoyutu = new System.IO.FileInfo(DosyaKonumu).Length;
if (DosyaBoyutu == WebDosyaBoyutu)
return true;
else
System.IO.File.Delete(DosyaKonumu);
}
Invoke_DegerYolla(pg_orkakur, "Description", Aciklama +" [" + GelenDosyaAdi + "]: " + Diger.BoyutHesapla(WebDosyaBoyutu,false));
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(AsyncYuklemeEvent);
Diger.Logla("bg*İşlem->Dosyalari_Indir(string Adres,string GelenDosyaAdi,string DosyaKonumu,string Aciklama) => " + Adres + "=>" + GelenDosyaAdi + "=>" + DosyaKonumu + "=>" + Aciklama);
await webClient.DownloadFileTaskAsync(new Uri(Adres), @TANIMLAR.GeciciDizin + GelenDosyaAdi);
return true;
}
catch (Exception e)
{
Diger.Logla("bg*Hata->Dosyalari_Indir() ->" + e.Message + e.InnerException);
MessageBox.Show(e.Message);
return false;
}
}