【问题标题】:GetCurrentDirectory C# error获取当前目录 C# 错误
【发布时间】:2012-04-22 22:07:40
【问题描述】:

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

string current = Directory.GetCurrentDirectory();

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

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

【问题讨论】:

  • 可怕的问题,感谢上帝的 UAC。 ProcessStartInfo.WorkingDirectory 属性。和 Assembly.GetEntryAssembly().Location 所以你不在乎。

标签: c# directory


【解决方案1】:

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

我不知道你想用你的应用程序实现什么,但绝对将每个副本作为一个新进程执行,并允许当前进程自行终止。

【讨论】:

    【解决方案2】:

    跟踪您移动它的位置。

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

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

    如果你想执行新的exe并退出旧的exe然后使用this api并调用

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

    如果你只是在 main 中,你可以简单地返回而不是调用 exit。 这应该可行,它可能会导致两个程序退出(如果这会杀死子进程),但我认为不会。

    【讨论】:

    • 这是我正在努力实现的个人项目。我想为挑战创建一个自我复制程序。那我该如何创建一个新流程呢?
    • Process.start("path\to\someexe")
    猜你喜欢
    • 2019-02-18
    • 2013-01-29
    • 2012-05-29
    • 2016-08-20
    • 2010-10-26
    • 1970-01-01
    • 2011-09-13
    • 2011-04-21
    相关资源
    最近更新 更多