有人可以向我解释以下资源管理器 CLI:
C:\windows\explorer.exe /factory,{75dff2b7-6936-4c06-a8bb-676a7b00b24b} -Embedding
答案1
{75DFF2B7-6936-4C06-A8BB-676A7B00B24B} CLSID_SeparateMultipleProcessExplorerHost
这只是启动一个分离的Explorer.exe
,所以如果一个崩溃,另一个仍可存活。:-)
答案2
只是想在 Tom 的回答中添加更多内容。使用 IDM 时,当您按下 Internet Download Manager 下载完成对话框中的“打开文件夹”按钮时,它将打开一个带有类似命令的新资源管理器实例。
您可能也会这么做。
答案3
创建这些单独的进程是因为某些东西衍生了 explorer.exe 进程,其参数是要打开的文件夹。
explorer.exe C:\test
无论您在哪里输入此命令 - 在 CMD 中,任务管理器的运行对话框中。我甚至通过CreateProcess
C++ 代码中的 API 函数创建了 explorer.exe 进程,它仍然使用以下父进程生成它:
C:\WINDOWS\system32\svchost.exe -k DcomLaunch -p
而不是使用我的程序作为父进程(就像您创建的其他每个进程一样)。但是,如果我终止进程,explorer.exe
然后不提供CreateProcess
命令行参数,它会像预期的那样以我的程序作为父进程打开 shell。如果您explorer.exe
在终止进程后输入 CMD 来启动它,它将具有以下父进程:
C:\WINDOWS\system32\svchost.exe -k netsvcs -p -s Schedule
Windows 的这种行为非常奇怪,确实令人非常困惑。
更新:我对 API 进行了更多实验,以下是我的发现。
使用 API 函数Shell执行A实际上,你可以打开 Explorer 文件夹,而无需创建单独的/factory,{CLSID}
进程!就像这样:
// Let The Shell do all the hard work =========================================================
HINSTANCE res = ShellExecuteA(
NULL, // [I|O] Handle to parent window that will show error or UI messages
"explore", // [I|O] Verb string -> open|edit|explore|find|open|print|runas|NULL(def)
"C:\\", // [I] File or object that the verb is beeing executed on
NULL, // [I|O] Cmd arguments to pass to the file, if it is exe file
NULL, // [I|O] Default working directory of the action NULL -> current dir
SW_SHOWNORMAL); // [I] Parameter that sets default nCmdShow status of the window
// ============================================================================================
或者,你可以使用open
动词代替 of 来explore
获得相同的结果。但是,这样做:
// Let The Shell do all the hard work =========================================================
HINSTANCE res = ShellExecuteA(
NULL, // [I|O] Handle to parent window that will show error or UI messages
"open", // [I|O] Verb string -> open|edit|explore|find|open|print|runas|NULL(def)
"explorer.exe", // [I] File or object that the verb is beeing executed on
"C:\\", // [I|O] Cmd arguments to pass to the file, if it is exe file
NULL, // [I|O] Default working directory of the action NULL -> current dir
SW_SHOWNORMAL); // [I] Parameter that sets default nCmdShow status of the window
// ============================================================================================
结果CreateProcess
与使用路径参数调用的行为相同。这表明,如果您从 CMD 启动 Explorer,后者ShellExecute
在内部使用相同的参数。