在myApplication.exe中,我调用ShellExecute
启动另一个进程,假设是OtherApplication.exe。
在OtherApplication.exe中,我注意到它无法生成它自己的进程,例如cmd.exe来执行某些任务。
如果我从Windows资源管理器(而不是myApplication.exe)运行OtherApplication.exe,则OtherApplication.exe中的所有内容都会按预期运行。
我查看了Process Explorer并在流程树中观察到以下内容:
所以我想我的问题是我可以从myApplication.exe启动一个子进程,但不会将其显示为父进程吗?如果我自己从Windows资源管理器或其他应用程序使用ShellExecute
运行它,那么我无法想到为什么OtherApplication.exe的行为会有所不同。
如果我使用myApplication.exe中的内容,我会得到相同的结果:
ShellExecute(0, nil, 'cmd.exe', PWideChar('/C "' + '"C:\...somepaths...\OtherApplication.exe"'), nil, SW_HIDE);
然后cmd.exe是myApplication.exe的子代。其进程子进程包括conhost.exe和OtherApplication.exe。它仍然与explorer.exe进程的行为不同。