我正在尝试从C ++代码打开Windows资源管理器并继承我的应用程序的环境。虽然这完全适用于命令提示符(或其他可执行文件),但打开Windows资源管理器不会继承父环境。
// Opens a cmd and inherits
ShellExecute(NULL, _T("open"), _T("cmd"), "", NULL, SW_SHOW);
// Opens an explorer but does not inherit
ShellExecute(NULL, _T("open"), _T("explorer"), "", NULL, SW_SHOW);
此外,尝试使用system
或CreateProcess
打开资源管理器不会继承任何内容。
system("explorer C:\\");
CreateProcess("C:\\Windows\\Explorer.exe",
" C:\\",
NULL,
NULL,
FALSE,
CREATE_DEFAULT_ERROR_MODE,
NULL,
NULL,
&StartupInfo,
&ProcessInfo);
对于CreateProcess
,undefined behavior非常清楚,当lpEnvironment
(第7个)参数设置为NULL时,新进程使用调用进程的环境。
lpEnvironment [in,optional] 指向新进程的环境块的指针。如果此参数为NULL,则新进程使用调用进程的环境。
为什么打开Windows资源管理器时不会发生这种情况?