在Windows中 - 可能是Unix - 在(32位)程序中使用chdir()函数在程序退出时不会更改目录。 (它在16位Windows程序中。)
有人知道如何在Windows 32位程序中执行此操作吗?
答案 0 :(得分:6)
答案 1 :(得分:3)
听起来你要求一个进程(你的Win32程序)改变另一个进程(你的shell)的CWD。据我所知,如果没有后一个过程为此目的提供API,这是不可能的。最近的我可以得到这个断言的任何类型的引用,但是,引用如下from MSDN:
父进程可以在进程创建期间直接更改子进程的环境变量。这是进程可以直接更改另一个进程的环境设置的唯一情况。
答案 2 :(得分:2)
嗯,是的,流行的API调用更改目录更改了进程。 ......但是......
(1。)16位Windows程序可以更改全局目录;可能是因为它们在与command.com相同的进程中运行。这就是我多年来一直乐于使用的东西;我假设XP以某种方式模仿这个? ...但是现在Windows 7 64位将不再运行 16位程序! (?)
(2。)Windows和Unix“cd”命令当然可以更改调用进程的目录 - 可能是因为它们是命令shell的内置命令。但是后继Windows shell设法实现这一目标,或者至少我希望 PowerShell可以做到这一点。所有内置插件?
(3。)我这样做的方法是修改我以前用来调用API的程序,简单地将“cd \ dst \ directory”发送到stdout,然后在程序中执行
chdirprogram> t~.bat
调用T~.bat
哪个效果很好。当然,更改目录程序的通常要点是在批处理过程中提供具有计算目标的功能。当然你可以在Unix中使用Bash等变量,但不能在Windows批处理文件中,尽管可能(?)在许多后续的Windows程序中,我不想使用它。 ...由于这个功能显然有用,我希望有人知道一个偷偷摸摸的Windows调用是做什么的。对于一个改变调用进程目录的进程来说,某种程度上错误的解释是那些虚假的,“你不应该这样做,我不会告诉你为什么”找借口。 ...但我想我会坚持我可怜的小批量文件。
答案 3 :(得分:0)
您是在谈论Windows API的SetCurrentDirectory功能吗?文章说该函数“更改当前进程的当前目录”。在例如Delphi中,有一个函数ChDir实际上调用了这个API函数。