如何通过C ++启动Explorer.exe?
-
21-08-2019 - |
题
我想以编程方式启动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注册表项,它阻止你控制的在探险家重新启动。
不隶属于 StackOverflow