0

完全なエラー:

ファイル「obj\x86\debug\myForm.exe」をコピーできません。別のプロセスで使用されているため、プロセスはファイル 'bin\debug\myForm.exe' にアクセスできません。

これは VS の悪名高いバグで、多くの人が持っていると読んだことがあります。私が調査したすべてのことは、プログラムが使用するすべてのリソースを適切に「クリーンアップ」しないという方向性を示しているため、アプリケーションの formClosed イベントハンドラーに2行を含めましたが、それでも問題は解決していません問題。以下は私のコードです:

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を再起動してもこれは解決しません。

4

1 に答える 1

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-06-17T20:53:41.780 に答える