GetCurrentDirectory C# error

本文关键字:error GetCurrentDirectory | 更新日期: 2023-09-27 18:32:05

我编写了一个C#程序,该程序可以复制自身并在精确的源目录中移动。它在第一次移动时工作正常,但第二次当前目录的值是错误的。要确定我使用的文件路径:

string current = Directory.GetCurrentDirectory();

程序第二次想要移动时,我再次调用GetCurrentDirectory,但"当前"的值仍然是旧路径,它给了我FileNotFound错误。

我该怎么做才能GetCurrentDirectory()阅读新路径?

GetCurrentDirectory C# error

您需要在新进程中执行应用程序。您可能使用的是原始进程,其当前目录不会更改为将应用程序复制到的任何位置。

我不知道您要通过应用程序实现什么目标,但一定要将每个副本作为新进程执行,并允许当前进程自行终止。

跟踪您移动它的位置。

GetCurrentDirectory() 是执行程序的工作目录。 当您简单地移动可执行文件时,这不会改变(如果您从新位置再次执行它,它会改变)。因此,要么创建一个新进程并将 exe 执行到其新位置,要么只跟踪您将其移动到的位置。后者要容易得多。

请注意,复制 exe 文件对程序的运行实例没有任何影响,因为它仍在从"旧"位置运行(此时可能实际加载到内存中)。对于正在运行的程序,exe文件副本只是一个文件。你为什么要这么做?

如果要执行新的exe并退出旧的exe,请使用此api并调用

Process.start("new/path/to/exe");
Environment.exit(0);

如果您只是在主要位置,您可以简单地返回而不是呼叫退出。这应该有效,它可能会导致两个程序退出(如果这会杀死子进程),但我认为它不会。