我想以编程方式启动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

有帮助吗?

解决方案

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

请参阅此 MSDN文章

  

lpApplicationName [在,可选]

     

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

     

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

其他提示

您也许应该给“的ShellExecuteEx “一试。此功能允许您指定的文件的或文件夹的和的动词的描述与它做什么。如果使用 “explore” 作为的动词的,它会打开Windows资源管理器与给定的文件夹的。

这是令人惊讶的很难找到如何可靠重新启动Windows资源管理器的相关信息。在64位的Windows 7/8,所述的ShellExecute方法不能正常工作,并导致东西,如文件复制和重载图标被完全破碎。

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

system("start explorer");

如果你想关闭并重新启动资源管理器中,您可能希望以编程方式禁用AutoRestartShell注册表项,它阻止你控制的探险家重新启动。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top