问题描述
是否可以从Windows上的C ++程序内部在调用CMD控制台中更改目录?
我知道有很多方法可以在程序范围内更改工作目录,例如使用_chdir()
,但我希望在程序退出时保留目录更改。
我希望行为类似于:
C:\Some\Path>MyProgram.exe
C:\Some\Other\Path>
(类似于在控制台中调用cd
)
一种解决方案是将程序包装在.bat
文件中,然后将程序的输出用作cd
命令的输入。但是,我希望这不是必需的。
解决方法
好吧,我还没有检查,但是我很确定您可以使用SetCurrentDirectoryW在父进程中执行CreateRemoteThread。
SetCurrentDirectory
与lpStartAddress
签名匹配,因此应该可以在父进程存储空间中分配带有新目录路径的z终止字符串,并将其作为{{1} }至lpParameter
。技巧是在父进程中获取CreateRemoteThread
的地址 。您应该枚举父流程模块,并使用SetCurrentDirectory
的基地址来计算SetCurrentDirectory
函数的适当偏移量。
要分配字符串,您应该使用VirtualAllocEx并使用WriteProcessMemory将值写入分配的内存。远程线程完成后,应使用Kernel32.dll
释放内存。
您确定该批次不是更简单的解决方案吗?