C# 由其他进程启动的应用程序得到相对文件夹混合

C# 由其他进程启动的应用程序得到相对文件夹混合,c#,process,C#,Process,简单地说,如果进程A启动应用程序B。 每当应用程序B尝试进行相对文件访问时,例如 using(StreamReader sr = new StreamReader("log.txt")) 它访问进程A所在文件夹中的log.txt,而不是应用程序B所在的文件夹。 目前,我对此的最新修复方法是获取应用程序的模块文件名+路径,删除文件名,并在我的所有相关文件访问调用前添加path变量 这是什么原因造成的?我如何避免它?在启动应用程序B的过程A中,您应该指定工作文件夹 看看这个: 编辑(OP澄清后,流

简单地说,如果进程A启动应用程序B。 每当应用程序B尝试进行相对文件访问时,例如

using(StreamReader sr = new StreamReader("log.txt"))
它访问进程A所在文件夹中的log.txt,而不是应用程序B所在的文件夹。 目前,我对此的最新修复方法是获取应用程序的模块文件名+路径,删除文件名,并在我的所有相关文件访问调用前添加path变量


这是什么原因造成的?我如何避免它?

在启动应用程序B的过程A中,您应该指定工作文件夹

看看这个:

编辑(OP澄清后,流程A是任务调度器,因此无法修改)


我认为任务调度器允许您为您计划的应用程序指定工作目录。但是,在任何情况下,即使您不能,您也可以在应用程序启动后第一件事就是将其当前目录设置到正确的位置。使用。

访问
进程后,您可以尝试获取。从这里,您可以访问进程的完整路径(使用属性)以及它的目录

string fullPath = myProcess.Modules[0].FileName;
string workingDirectory = System.IO.Directory.GetParent(fullPath);

根据,32位模块将无法枚举64位程序集的模块,因此如果目标进程将在该模式下运行,则需要将程序重新编译为64位。

请注意,我正在使用C#和System.DiagnosticsProcess a中的进程类。DiagnosticsProcess a不是我的,因此无法设置工作目录。我需要一些事后修复的东西。在这种情况下,A是任务调度器,但它也可以用于许多不同的应用程序,因此我需要一种不同的解决方案。进程B是您的,还是您的程序完全独立于任务调度器启动的任何程序?我认为任务调度器允许您为您计划的应用程序指定工作目录。但是在任何情况下,即使您不能,您也可以在应用程序启动时将其当前目录设置到正确的位置。查看为什么将日志文件存储在与可执行文件相同的文件夹中?