简单地说,如果进程A启动应用程序B. 每当应用程序B尝试执行相对文件访问时,例如
using(StreamReader sr = new StreamReader("log.txt"))
它访问进程A所在的文件夹中的log.txt,而不是应用程序B所在的文件夹。 现在我对此的修复是获取应用程序的模块文件名+路径,删除文件名并将路径变量添加到我的所有相关文件访问调用中。
是什么导致这种情况,我该如何避免呢?
答案 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位那个模式。