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