我已经构建了一个依赖“cmd.exe”来执行某些任务的c ++程序。 现在我和测试目的,该文件的路径是“c:\ windows \ system32 \ cmd.exe”。 我的问题是有任何c ++ API返回该文件的路径,知道我的程序必须在win32和win64上工作。
答案 0 :(得分:3)
GetSystemDirectory
是一种选择。对于32位应用程序,它将返回32位系统目录。对于x64应用程序,它将返回64位本机系统目录。
你也可以CreateProcess
或ShellExecuteEx
与cmd.exe
一起使用,除非你特别关注某人操纵搜索路径并弄错了{{1 }}
如果您要发布cmd.exe
文件,那么您只需使用.cmd
动词ShellExecuteEx
即可。通常,对于Windows桌面应用程序,建议使用open
启动其他程序。例如,这里有一些代码将启动运行ShellExecuteEx
脚本的命令提示符并等待结果:
test.cmd
您也可以使用:
#include <windows.h>
#include <stdio.h>
#pragma comment(lib,"shell32.lib")
void main()
{
SHELLEXECUTEINFOW info = {};
info.cbSize = sizeof( info );
info.lpVerb = L"open";
info.fMask = SEE_MASK_FLAG_NO_UI | SEE_MASK_NOASYNC | SEE_MASK_NOCLOSEPROCESS;
info.lpFile = L"test.cmd";
info.lpParameters = nullptr; // Command-line parameters
info.lpDirectory = nullptr; // Working directory to set
info.nShow = SW_SHOW;
if( !ShellExecuteExW( &info ) )
{
printf("ERROR\n");
}
else
{
// Wait for process to finish.
WaitForSingleObject( info.hProcess, INFINITE );
// Return exit code from process
DWORD exitcode;
GetExitCodeProcess( info.hProcess, &exitcode );
CloseHandle( info.hProcess );
printf("Finished with exit code %u\n", exitcode);
}
}
使用
info.lpFile = L"cmd.exe"; info.lpParameters = L"/c test.cmd";
代替ShellExecuteEx
的主要原因是CreateProcess
可以使用正确的manifest elements处理前提的管理员提升请求。如果目标EXE需要比当前进程更高的权限,ShellExecuteEx
将失败。
答案 1 :(得分:0)
解释器路径在%COMSPEC%
环境变量中可用,可以使用GetEnvironmentVariable()
读取。