5

我正在尝试以编程方式启动 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

4

3 回答 3

4

第一个参数是应用名称;第二个是命令行。尝试将“explorer.exe”指定为第二个参数。

请参阅此MSDN 文章

lpApplicationName [输入,可选]

要执行的模块的名称。该模块可以是基于 Windows 的应用程序。如果适当的子系统在本地计算机上可用,它可以是某种其他类型的模块(例如,MS-DOS 或 OS/2)。

该字符串可以指定要执行的模块的完整路径和文件名,也可以指定部分名称。在部分名称的情况下,该函数使用当前驱动器和当前目录来完成规范。该函数不会使用搜索路径。该参数必须包含文件扩展名;假定没有默认扩展名。

于 2009-05-14T20:02:21.223 回答
3

您可能应该尝试“ ShellExecuteEx ”。此函数允许您指定文件文件夹以及描述如何处理它的动词。如果您使用“ explore”作为动词,它将打开带有给定文件夹的 Windows 资源管理器。

于 2009-05-15T03:37:38.383 回答
0

很难找到有关如何可靠地重新启动 Windows 资源管理器的相关信息。在 64 位 Windows 7/8 上,ShellExecute 方法无法正常工作,并导致文件复制和图标覆盖等事情被完全破坏。

最可靠的方法似乎是使用 stdlib.h 系统调用:

system("start explorer");

如果您尝试关闭并重新启动资源管理器,您可能希望以编程方式禁用 AutoRestartShell 注册表项,这会阻止您控制资源管理器何时重新启动。

于 2014-12-22T18:02:45.343 回答