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

时间:2012-01-07 19:43:07

标签: c# process

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

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

它访问进程A所在的文件夹中的log.txt,而不是应用程序B所在的文件夹。 现在我对此的修复是获取应用程序的模块文件名+路径,删除文件名并将路径变量添加到我的所有相关文件访问调用中。

是什么导致这种情况,我该如何避免呢?

2 个答案:

答案 0 :(得分:1)

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

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

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

我认为任务计划程序允许您为您计划的应用程序指定工作目录。但无论如何,即使你不能,你也可以使用SetCurrentDirectory()将应用程序的当前目录设置为正确的位置,然后使用{{3}}。

答案 1 :(得分:0)

有权访问Process后,您可以尝试获取Module。从这里,您可以访问流程的完整路径(使用FileName属性),然后访问其目录。

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

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