无法复制文件“obj \ x86 \ debug \ myForm.exe”该进程无法访问该文件...错误

时间:2013-06-17 18:26:21

标签: c# .net winforms

完整错误:

  

无法复制文件“obj \ x86 \ debug \ myForm.exe”。这个过程不能   访问文件'bin \ debug \ myForm.exe',因为它正被使用   另一个过程。

这是VS的一个臭名昭着的错误我读过很多人都有。我研究过的所有东西都指向了我没有正确“清理”程序使用的所有资源的方向,所以我在应用程序的formClosed事件处理程序中包含了两行,但是仍然没有解决问题。以下是我的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.ServiceProcess;
using System.Diagnostics;

namespace Service_Control_Panel {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
        }


        const string serviceName = "AgentService";
        ServiceController sc;

        private void Form1_Load(object sender, EventArgs e) {
          sc = new ServiceController("AgentService");
          statusRefresh.Enabled = true;
        }

        private void startBtn_Click(object sender, EventArgs e) {
            sc.Start();
        }

        private void stopBtn_Click(object sender, EventArgs e) {
           sc.Stop();
        }

        private void statusRefresh_Tick(object sender, EventArgs e) {
            statusBox.Text = Convert.ToString(sc.Status);
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e) {
            System.Diagnostics.Process.GetCurrentProcess().Kill();
            Application.Exit();
        }
    }
}

老实说,我不知道为什么这是一个问题。除此之外,程序没有在任务管理器的进程选项卡中作为“myForm.exe”运行,或者你有什么。而且,如果我重新启动系统,我可以在进行更改后最终构建新版本的唯一方法!甚至没有重启VS就解决了这个问题。

1 个答案:

答案 0 :(得分:1)

尝试关闭,处置然后释放对服务的引用。这篇MSDN文章谈到了它: http://msdn.microsoft.com/en-us/library/3cc9y48w.aspx

    private void Form1_FormClosed(object sender, FormClosedEventArgs e) {
        sc.Close();
        sc.Dispose();
        sc = null;
        //kill is unnecessary.  I'd just stick with app exit.
        System.Diagnostics.Process.GetCurrentProcess().Kill();
        Application.Exit();
    }