我想通过读取命令行来确定已知进程使用的文件的绝对路径。目前,该过程是在命令行中指向各种文件(如配置文件)的相对路径启动的。问题是,如果路径不是相对于包含可执行文件的文件夹,我无法转换命令行提供的相对路径,我不能100%肯定。
例如两个批处理文件:
BATCH 1 CD c:\ test \ bin test.exe .. \ config \ config.ini
BATCH 2 CD c:\ test 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,因为我知道可执行文件的名称。我也可以确定命令行。我现在必须找到可执行文件的工作目录或当前目录,以便我可以解析命令行的相对路径。我希望我能使问题更清楚。答案 0 :(得分:8)
我认为Environment.CurrentDirectory
应该为您提供启动可执行文件的目录。它只在流程开始时可靠,因为它可以在以后更改。
或者尝试Process.GetCurrentProcess().StartInfo.WorkingDirectory
。我自己没试过,只是在MSDN
答案 1 :(得分:1)
您是否尝试过Application.ExecutablePath
?
或者,有许多路径可以从Application
答案 2 :(得分:0)
要获取c#中另一个进程的工作目录(当前目录),请查看https://stackoverflow.com/a/23842609/3029359