C#获取另一个进程的工作目录

问题描述 投票:8回答:3

我想通过读取命令行来确定已​​知进程使用的文件的绝对路径。当前,该过程从命令行中的相对路径开始,这些路径指向各种文件,例如配置文件。问题是,如果路径不是相对于包含可执行文件的文件夹,则我无法转换命令行中提供的相对路径,那么我不能百分百确定。

例如,两个批处理文件:

BATCH 1CD c:\ test \ bintest.exe .. \ config \ config.ini

BATCH 2CD c:\测试bin \ test.exe config \ config.ini

对于一个批处理文件,我得到的命令行是“ c:\ test \ bin \ test.exe .. \ config \ config.ini”,对于两个批处理文件,我得到的是“ c:\ test \ bin \ test。 exe config \ config.ini”。所以,看到这个我无法解析路径。

无论如何,对于初学者,我都是使用ManagementObjectSearcher从WMI查询中获得命令行的。现在,我需要获取启动过程的工作目录,以解析在命令行中传递的路径,但是如何?

编辑:我忘记了一个关键细节。我想获取另一个进程的工作目录。基本上,我的主程序从另一个程序收集信息。我能够确定进程ID,因为我知道可执行文件的名称。我还可以确定命令行。现在,我必须找到启动可执行文件的工作目录或当前目录,以便我可以解析命令行的相对路径。我希望我把这个问题弄清楚了。

c# process wmi working-directory
3个回答
8
投票

我认为Environment.CurrentDirectory应该为您提供可执行文件的启动目录。它仅在过程开始时是可靠的,因为它以后可能会更改。

或者也许尝试Process.GetCurrentProcess().StartInfo.WorkingDirectory。我自己没有尝试过,只是在MSDN

上进行了查找

1
投票

您是否尝试过Application.ExecutablePath

或者,有很多路径可以从Application中检索


0
投票

要在c#中获取另一个进程的工作目录(当前目录),请看https://stackoverflow.com/a/23842609/3029359

© www.soinside.com 2019 - 2024. All rights reserved.