Çözüldü C# "because it is being used by another process." hatası

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.
Durum
Mesaj gönderimine kapalı.

Froxx

Hectopat
Katılım
7 Aralık 2019
Mesajlar
49
Merhaba, bir süredir C# öğreniyorum ve bir hata ile karşılaştım, hatayı çözmek için çok uğraştım ama çözemedim, ileri düzeyde bilgisi olan bir arkadaş Discord ismini verebilirse çok memnun olurum olurum.
Hata; 'because it is being used by another process.'
 
Çözüm
Kod:
private void wc_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e){
    if(e.Error == null){
        var process = Process.Start(program_name);
        process.EnableRaisingEvents = true;
        process.Exited += (_,args) => {
            File.Delete(program_name);
            //Performs on process exited.
        };
    }
    else{
        //Error handling...
    }
}

PC başında değilim ama bunun işe yaraması lazım.
Merhaba, bir süredir C# öğreniyorum ve bir hata ile karşılaştım, hatayı çözmek için çok uğraştım ama çözemedim, ileri düzeyde bilgisi olan bir arkadaş Discord ismini verebilirse çok memnun olurum olurum.
Hata; 'because it is being used by another process.'
Kodların ekran görüntüsünü atabilirsen yardımcı olmaya çalışırım.
 
Merhaba, bir süredir C# öğreniyorum ve bir hata ile karşılaştım, hatayı çözmek için çok uğraştım ama çözemedim, ileri düzeyde bilgisi olan bir arkadaş Discord ismini verebilirse çok memnun olurum olurum.
Hata; 'because it is being used by another process.'
Uygulama arka planda açık kalmış olabilir. Lütfen ekran görüntüsü paylaşın.
 
Discord paylaşmak yasak. Sorunu nerede yaşıyorsunuz. Ayrıca, How do I ask a good question? - Help Center
Discord'un yasak olduğunu bilmiyordum, discorddan konuşuruz diye üstü kapalı anlatmıştım, bir dahaki sefere daha dikkatli olacağım, teşekkürler

Uygulama arka planda açık kalmış olabilir. Lütfen ekran görüntüsü paylaşın.
Kodların ekran görüntüsünü atabilirsen yardımcı olmaya çalışırım.
Discord paylaşmak yasak. Sorunu nerede yaşıyorsunuz. Ayrıca, How do I ask a good question? - Help Center
C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
using System.IO;
using System.Net;
  Stopwatch sw = new Stopwatch();
        string link = "";
        string program_name = "";

        private void button1_Click(object sender, EventArgs e)
        {
            link = "https://cdn.cloudflare.steamstatic.com/client/installer/SteamSetup.exe";
            program_name = "SteamSetup.exe";
            File.Delete("@" + program_name);

            Uri uri = new Uri(link);
            try
            {

                WebClient wc = new WebClient();

                wc.DownloadFileAsync(uri, program_name);
                File.SetAttributes(program_name, FileAttributes.Hidden);
                wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(wc_DownloadProgressChanged);
                wc.DownloadFileCompleted += new AsyncCompletedEventHandler(wc_DownloadFileCompleted);
                wc.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
                wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);


            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
            if (File.Exists(program_name))
            {
                File.Delete(program_name);
            }
        }
        private void wc_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
        {
            if (e.Error == null)
            {
                Process.Start(program_name);



            }
            else
            {
                MessageBox.Show("Unable to download exe, please check your connection", "Download failed!");

            }
        }
        private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            label1.Text = "Downloading " + ": %" + e.ProgressPercentage.ToString();
            label2.Text = string.Format("{0} MB's / {1} MB's",
            (e.BytesReceived / 1024d / 1024d).ToString("0.00"),
             (e.TotalBytesToReceive / 1024d / 1024d).ToString("0.00"));
            sw.Start();

            label3.Text = string.Format("{0} kb/s", (e.BytesReceived / 1024 / sw.Elapsed.TotalSeconds).ToString("0.00"));


        }
        private void Completed(object sender, AsyncCompletedEventArgs e)
        {
            label4.Text = ("Download Complete");

        }
        private void wc_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            progressBar1.Value = e.ProgressPercentage;
            if (progressBar1.Value == progressBar1.Maximum)
            {
                progressBar1.Value = 0;
            }

        }

1656833666213.png

Programı kısaca özetlemek gerekirse, internet üzerinden exe indiriyor ,gizli yapıyor ve açıyor, daha sonra exe'i kapatıldığında exe'nin silinmesi gerekiyor ama yapmıyor, hata veriyor.
 
Son düzenleme:
Çünkü dosya inerken(yazılırken)silmeye çalışıyorsunuz. DownloadComplete eventinde Process'i başlattıktan sonra bir Timer ile Process'i izleyin. Process kapandığında dosyayı silersiniz.
 
Çünkü dosya inerken(yazılırken)silmeye çalışıyorsunuz. DownloadComplete eventinde Process'i başlattıktan sonra bir Timer ile Process'i izleyin. Process kapandığında dosyayı silersiniz.
Nasıl yapacağımı bilmiyorum,Kodu paylaşabilir misiniz rica etsem? Bu işlerde biraz yeniyim.
 
Kod:
Process[] pname = Process.GetProcessesByName("SteamSetup.exe");
if (pname.Length =! 0){
//kodunuz
}

C# bilmediğimden dolayı yazamadım. Ancak if içerisinde "AND" kullanmanız lazım.
İf (pname. Length =! 0 && File. Exists(program_name)) tarzı. Ya da arkadaşın dediği gibi Timer ile izleyebilirsiniz. Açıkçası verimli bir yöntem mi bilemiyorum. Lakin illaki daha düzenli ve doğru bir yöntem vardır.
 
Şimdi baktım Timer ile izlemekten daha efektif bir yol var. Bilgisayara geçip yazıyorum.
 
Kod:
Process[] pname = Process.GetProcessesByName("SteamSetup.exe");
if (pname.Length =! 0){
//kodunuz
}

C# bilmediğimden dolayı yazamadım. Ancak if içerisinde "AND" kullanmanız lazım.
İf (pname. Length =! 0 && File. Exists(program_name)) tarzı. Ya da arkadaşın dediği gibi Timer ile izleyebilirsiniz. Açıkçası verimli bir yöntem mi bilemiyorum. Lakin illaki daha düzenli ve doğru bir yöntem vardır.
"AND" Dediği kısım "&&" olacak yani.
 
Durum
Mesaj gönderimine kapalı.

Geri
Yukarı