Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GetCurrentDirectory C#错误_C#_Directory - Fatal编程技术网

GetCurrentDirectory C#错误

GetCurrentDirectory C#错误,c#,directory,C#,Directory,我已经编写了一个C#程序,可以复制自己并在精确的源目录中移动。它第一次移动时工作正常,但第二次当前目录的值出错。要确定我使用的文件路径,请执行以下操作: string current = Directory.GetCurrentDirectory(); 程序第二次要移动时,我再次调用GetCurrentDirectory,但“current”的值仍然是旧路径,它给我FileNotFound错误 如何使GetCurrentDirectory()读取新路径?您需要在新进程中执行应用程序。您可能正在

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

string current = Directory.GetCurrentDirectory();
程序第二次要移动时,我再次调用
GetCurrentDirectory
,但“current”的值仍然是旧路径,它给我
FileNotFound
错误


如何使
GetCurrentDirectory()
读取新路径?

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


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

跟踪你将其移动到哪里

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

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

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

Process.start("new/path/to/exe");
Environment.exit(0);
如果您只是在main中,您可以直接返回,而不是调用exit。
这应该是可行的,它可能会导致两个程序都退出(如果这会杀死子进程),但我认为不会

可怕的问题,谢天谢地,UAC。ProcessStartInfo.WorkingDirectory属性。还有Assembly.GetEntryAssembly().Location,所以你不必在意。这是我试图实现的个人项目。我想为这个挑战创建一个自我复制的程序。那么如何创建新进程?process.start(“path\to\someexe”)