【问题标题】:Can't Delete folder as it's in use.无法删除文件夹,因为它正在使用中。
【发布时间】:2013-12-08 06:03:31
【问题描述】:

我尝试制作的自动更新软件存在问题。该应用程序作为服务器应用程序运行,并通过 FTP 检查更新并在有更新版本可用时下载它们。然后这会在程序根目录中解压缩一个名为 update 的文件夹。然后它会启动一个名为 update.bat 的文件,该文件会执行我可能需要为该更新执行的任何文件复制等操作。完成后,update.bat 将启动新的服务器应用程序。一旦程序再次检查更新,假设删除服务器应用程序根目录中的更新目录以及从更新服务器下载的 update.rar 文件。除了正在使用文件夹并且不会删除之外,所有这些都可以正常工作。我已经阅读了有关释放句柄和更改当前目录等的各种内容。但似乎无法使其正常工作。我会很感激有人在这里帮助我。这是此更新的代码。

        private void Form1_Load(object sender, EventArgs e)
    {
        foreach (string s in Directory.GetDirectories("C:/my update dir"))
        {

            if (s.Contains("Instance"))
            {

                var _instance = Regex.Match(s, @"\d+");

                Process p = new Process();
                ProcessStartInfo pinfo = new ProcessStartInfo();
                pinfo.FileName = "cmd.exe";
                pinfo.WorkingDirectory = "C:/mySQL/bin";
                pinfo.Arguments = "/C mysql.exe -u** -p** dbnameHere" + _instance.ToString() +
                    " < \"C:/my update dir/update/update.sql\"";
                p.StartInfo = pinfo;
                p.Start();
                p.WaitForExit();
                p.Close();
                p.Dispose();
                Directory.SetCurrentDirectory("C:/");
            }
        }

        Directory.SetCurrentDirectory("C:/");
        this.Dispose();
        Application.Exit();
    }

【问题讨论】:

    标签: c# io directory


    【解决方案1】:

    我猜你的问题出在这里:

    完成后,update.bat 将启动新服务器 应用。

    Windows 将一直“锁定”目录到 .BAT 文件。因此,如果 .BAT 从该目录运行服务器进程,该进程将继承调用进程的 CWD 和文件描述符。

    从您的代码中不清楚这是怎么回事,但您可能还想在生成进程之前尝试更改 CWD。​​p>

    【讨论】:

    • 是的,效果很好。只需更改 .bat 文件中的目录并释放句柄。
    猜你喜欢
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 2016-09-21
    • 2014-05-26
    • 2011-11-20
    • 2017-04-28
    • 1970-01-01
    相关资源
    最近更新 更多