如何通过 C++ 启动 explorer.exe?
Posted
技术标签:
【中文标题】如何通过 C++ 启动 explorer.exe?【英文标题】:How can I start explorer.exe via C++? 【发布时间】:2009-05-14 20:00:03 【问题描述】:我正在尝试以编程方式启动 explorer.exe,但我没有任何运气。
这是我的代码:
cout << pName << "died, lets restart it." << endl;
STARTUPINFO startupInfo = 0;
startupInfo.cb = sizeof(startupInfo);
PROCESS_INFORMATION processInformation;
if(CreateProcess(pName, NULL, NULL, NULL, false, NORMAL_PRIORITY_CLASS, NULL, NULL, &startupInfo, &processInformation) == 0)
cout << "Error starting " << pName << ": " << GetLastError() << endl;
pName 是 explorer.exe
谁能告诉我我做错了什么?我收到错误代码“2”,即ERROR_FILE_NOT_FOUND
【问题讨论】:
【参考方案1】:第一个参数是应用名称;第二个是命令行。尝试将“explorer.exe”指定为第二个参数。
看到这个MSDN article:
lpApplicationName [输入,可选]
要执行的模块的名称。 该模块可以是基于 Windows 的 应用。它可以是其他类型 模块(例如,MS-DOS 或 OS/2) 如果适当的子系统是 在本地计算机上可用。
字符串可以指定完整路径 和要执行的模块的文件名 或者它可以指定一个部分名称。在 在部分名称的情况下, 功能使用当前的驱动器和 当前目录完成 规格。 该功能不会 使用搜索路径。这个参数 必须包含文件扩展名; 没有假定默认扩展名。
【讨论】:
这行得通,但资源管理器通过了“设置个性化...”有没有办法告诉它不要这样做?【参考方案2】:您可能应该尝试“ShellExecuteEx”。这个函数可以让你指定一个文件或文件夹和一个描述如何处理它的动词。如果您使用“explore
”作为动词,它将打开带有给定文件夹的Windows资源管理器。
【讨论】:
【参考方案3】:很难找到有关如何可靠重新启动 Windows 资源管理器的相关信息。在 64 位 Windows 7/8 上,ShellExecute 方法无法正常工作,并导致文件复制和图标覆盖等事情完全破坏。
最靠谱的方式似乎是使用stdlib.h系统调用:
system("start explorer");
如果您尝试关闭并重新启动资源管理器,您可能希望以编程方式禁用 AutoRestartShell 注册表项,这会阻止您控制何时资源管理器重新启动。
【讨论】:
以上是关于如何通过 C++ 启动 explorer.exe?的主要内容,如果未能解决你的问题,请参考以下文章
Windows10 NT Shell ,使用 WPF Application 替换 Explorer.exe
如何在 Windows 8.1 中结束 explorer.exe(每次我这样做都会重新启动)