“/factory,{CLSID 75*4b} -embedding” 起什么作用?

“/factory,{CLSID 75*4b} -embedding” 起什么作用?

有人可以向我解释以下资源管理器 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 中,任务管理器的运行对话框中。我甚至通过CreateProcessC++ 代码中的 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在内部使用相同的参数。

相关内容