由其他进程启动的应用程序会混合使用相对文件夹

本文关键字:混合 相对 文件夹 应用程序 其他 进程 启动 | 更新日期: 2023-09-27 18:19:47

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

using(StreamReader sr = new StreamReader("log.txt"))

它访问进程A所在的文件夹中的log.txt,而不是应用程序B所在的文件夹。现在,我目前的解决方案是获取我的应用程序的模块文件名+路径,删除文件名,并将路径变量前置到我所有的相对文件访问调用中。

造成这种情况的原因是什么?我该如何避免?

由其他进程启动的应用程序会混合使用相对文件夹

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

看看这个:http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.workingdirectory.aspx

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

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

一旦您有权访问Process,就可以尝试获取模块。从这里,您可以访问进程的完整路径(使用FileName属性),进而访问其目录。

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

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