【问题标题】:Unable to copy file "obj\x86\debug\myForm.exe" The process cannot access the file ... error无法复制文件“obj\x86\debug\myForm.exe”进程无法访问文件...错误
【发布时间】:2013-06-18 04:53:41
【问题描述】:

完整的错误:

无法复制文件“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 也无法解决此问题。

【问题讨论】:

  • 关闭VS重新打开能解决问题吗?还要检查是否有一些隐藏的进程仍在运行(比如程序的隐藏实例)。或者它甚至可能是您的防病毒软件。
  • 正如我在帖子底部所说的,这并不能解决我的问题。只有重新启动工作站才能解决这个问题,然后当我进行另一个甚至是简单的更改时,我又回到了无法构建的状态。
  • 你有什么版本的VS?这听起来确实像是即使您停止运行程序,仍有东西在使用该文件,或者该程序仍在后台运行,或者另一个程序(如防病毒)正在保留该文件。
  • Visual Studio 2010 专业版 10.0.40219.1 SP1 版本
  • 请注意。我已经安装了 Avast,但在开发过程中我完全禁用了它,以便我轻松访问系统。

标签: c# .net winforms


【解决方案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();
    }

【讨论】:

  • 这本质上是我的问题。我所做的服务引用了涉及此问题的表单应用程序,即使该服务没有打开程序,它也引用了它,因此正在使用它并防止新版本复制旧的。感谢您的帮助!
猜你喜欢
  • 2013-07-05
  • 1970-01-01
  • 1970-01-01
  • 2018-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多