.net 获取cmd.exe的当前工作目录
如何检索cmd.exe的当前工作目录 这似乎是可能的。例如,使用ProcessExplorer,选择CMD.exe,右键单击“属性”、“图像”选项卡,“当前目录”使用CD或CHDIR命令释放目录集 我查看了.NET进程和ProcessStartInfo类(ProcessStartInfo.WorkingDirectory始终返回“”),似乎找不到确定这一点的方法。在这方面也没有什么突出的地方.net 获取cmd.exe的当前工作目录,.net,winapi,directory,cmd,.net,Winapi,Directory,Cmd,如何检索cmd.exe的当前工作目录 这似乎是可能的。例如,使用ProcessExplorer,选择CMD.exe,右键单击“属性”、“图像”选项卡,“当前目录”使用CD或CHDIR命令释放目录集 我查看了.NET进程和ProcessStartInfo类(ProcessStartInfo.WorkingDirectory始终返回“”),似乎找不到确定这一点的方法。在这方面也没有什么突出的地方 作为一个例子,我希望通过编程能够说:Process.GetCurrentWorkingDirectory
作为一个例子,我希望通过编程能够说:Process.GetCurrentWorkingDirectory(processID),其中processID是另一个正在运行的进程的Windows进程ID 有没有解决方案,WinAPI或.NET [更新] 提出此问题的原因:
我已经使用“命令提示符资源管理器栏”一段时间了,它非常棒,除非我将“CD”转到一个新目录,当前的资源管理器窗口也不会改变。(即从资源管理器到命令提示符的同步仅为1路)。我希望将此设置为双向。您是指批处理文件中的%CD%变量吗 像这样:
set OLDDIR=%CD%
.. do stuff ..
chdir /d %OLDDIR% &rem restore current directory
在命令提示符下尝试回显%CD%。)
这正是您所需要的,这里有一个PowerShell函数来执行此操作:
$(get-location)
希望这有帮助
我发现这一切都来自。未经测试,一种可能的方法: 使用DllMain创建一个DLL,该DLL使用GetThreadStartInformation()查找缓冲区的地址,然后使用GetCurrentDirectory填充它。这应该是可以的,因为这两个函数都在kernel32中,它总是存在的。你需要有一些结构来返回成功/失败
使用系统;
使用系统诊断;
使用System.IO;
名称空间测试
{
班级计划
{
静态void Main(字符串[]参数)
{
Process[]procList=Process.GetProcessesByName(“cmd”);
字符串sFileName;
for(int i=0;i
这里是我机器上的输出(我打开了四个命令行):
这可能包含解决方案的提示。在GetProcessString函数中查找:
// Get Command Line Block
// At offset 0x00020498 is the process current directory followed by
// the system PATH. After that is the process full command line, followed
// by the exe name and the windows station it's running on.
这篇CodeProject文章“”也可能很有用。请(我自己)回答一个类似的问题。我编写了一个命令行实用程序和C#包装器来读取流程环境变量。对于我的问题(获取java的当前目录),我只需阅读catalina_基本目录
我不确定这是否直接适用于cmd.exe。代码项目文章中提供的实用程序无法使用cmd.exe。请尝试以下简单的环境属性:
Environment.CurrentDirectory()我希望通过编程可以说:Process.GetCurrentWorkingDirectory(processID),其中processID是windows进程ID。您所要求的听起来有些可疑。除非您正在测试(QA)或调试,否则一个流程不应该干扰另一个流程。将其用于“生产”或商业软件是不好的,因为它需要特权。这是你的产品得不到的。那个么,你们想完成什么?公平的问题。没什么可疑的。我已经使用“命令提示符资源管理器栏”一段时间了,它非常棒,除非我将“CD”转到一个新目录,当前的资源管理器窗口也不会改变。(即从资源管理器到命令提示符的同步仅为1路)。我希望实现这2种方式。我需要这个用于测试目的-我想杀死一个java Tomcat进程,并用它作为区别于其他方式的一种方式。这不起作用!这将给出模块的目录,而不是进程的当前目录。在测试中,其中一行应该是C:\Users\s
// Get Command Line Block
// At offset 0x00020498 is the process current directory followed by
// the system PATH. After that is the process full command line, followed
// by the exe name and the windows station it's running on.