【问题标题】:how to detect invalid commands being passed into create process如何检测传递给创建进程的无效命令
【发布时间】:2011-09-05 03:04:28
【问题描述】:

我目前正在开发一个启动用户指定程序的程序。 传入的是用户输入的 wstring。我的问题是如何让它抛出异常或检查“passedIn”是否有效。目前,如果用户输入“notepad.exe”,它会正确启动它,但如果他们输入像“asdf”这样的虚假内容或类似的东西,它仍然会创建进程。

try {
    wchar_t* commandLine = new wchar_t [CP_MAX_COMMANDLINE];
    wcsncpy_s(commandLine, CP_MAX_COMMANDLINE, passedIn.c_str(), passedIn.size() +1);
    CreateProcess(NULL, 
        commandLine, 
        NULL, NULL,
        false,CREATE_NEW_CONSOLE,NULL,
        NULL,
        &sinfo,
        &pi);

    delete [] commandLine;
}
catch (int e) {
    cout << "An exception occurred. Exception Nr. " << e << endl;
}

我希望我的渔获能抓住它,但它没有。我可以做些什么来检查它是否有效?

谢谢!

【问题讨论】:

    标签: c++ winapi exception createprocess


    【解决方案1】:

    引用function's documentation(这应该是您检查的第一件事):

    如果函数成功,则返回值非零。

    如果函数失败,返回值为零。要获取更多错误信息,请致电GetLastError

    所以,检查函数的返回值。

    【讨论】:

    • 完美!谢谢,当我的程序随机崩溃时,我正在使用 getLastError。我必须再等 6 分钟才能将此标记为正确答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 2012-11-07
    相关资源
    最近更新 更多