【问题标题】:C# Get working directory of another processC#获取另一个进程的工作目录
【发布时间】:2011-03-23 11:16:18
【问题描述】:

我想通过读取命令行来确定已​​知进程使用的文件的绝对路径。目前,该过程以命令行中指向各种文件(如配置文件)的相对路径启动。问题是,如果路径不是相对于包含可执行文件的文件夹,我无法转换命令行提供的相对路径,我不能 100% 确定。

例如两个批处理文件:

第 1 批 光盘 c:\test\bin test.exe ..\config\config.ini

第 2 批 光盘 c:\测试 bin\test.exe 配置\config.ini

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

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

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

【问题讨论】:

  • 我认为问题标题与您要问的不太一样。 “获取进程工作目录”是工作目录的问题,可能在执行过程中会发生变化,但问题本身似乎是在询问可执行文件的启动目录,这可能完全不同(并且在执行过程中不会改变)流程执行)。 @ chris166 的回答解决了您的问题的标题,但我的回答解决了问题本身,恕我直言。或许你能澄清一下困惑?

标签: c# process wmi working-directory


【解决方案1】:

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

或者试试Process.GetCurrentProcess().StartInfo.WorkingDirectory。我自己没试过,只是在MSDN上查了一下

【讨论】:

  • 我在控制台应用程序中尝试了所有这些,Environment.CurrentDirectory 出现了应用程序启动的目录,正如您所想的那样。但是 Process.GetCurrentProcess().StartInfo.WorkingDirectory 以空字符串的形式出现。这让我感到惊讶——我认为它会是一样的。进一步的测试表明,如果我创建了可执行文件的快捷方式,然后将快捷方式的“Start In”属性修改为某种东西(如“C:\”),那么这就是 StartInfo.WorkingDirectory 中的内容。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    你试过Application.ExecutablePath吗?

    或者,可以从Application 检索到许多路径

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多