繁体   English   中英

找到cmd.exe文件的位置

[英]find the location of the cmd.exe file

我已经构建了一个依赖“cmd.exe”来执行某些任务的c ++程序。 现在我和测试目的,该文件的路径是“c:\\ windows \\ system32 \\ cmd.exe”。 我的问题是有任何c ++ API返回该文件的路径,知道我的程序必须在win32和win64上工作。

GetSystemDirectory是一个选项。 对于32位应用程序,它将返回32位系统目录。 对于x64应用程序,它将返回64位本机系统目录。

您也可以将CreateProcessShellExecuteExcmd.exe ,它应该在没有路径的情况下找到它,除非您特别关注某人操纵搜索路径并获取错误的cmd.exe

如果要启动.cmd文件,则可以使用带有open动词的ShellExecuteEx执行此操作。 通常,对于Windows桌面应用程序,建议使用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主要原因是ShellExecuteEx可以使用正确的清单元素处理exes的管理员提升请求。 如果目标EXE需要比当前进程更高的权限, CreateProcess将失败。

解释器路径在%COMSPEC%环境变量中可用,可以使用GetEnvironmentVariable()读取。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM