Как использовать createprocess для выполнения программы adb в PATH?

Я добавил местоположение adb в PATH. В моем проекте C я хочу выполнить текущий cmd:

char *broadcastStop = "adb shell am broadcast -a NotifyServiceStop";

char *forward = "adb forward tcp:12582 tcp:10086";

char *broadcastStart = "adb shell am broadcast -a NotifyServiceStart";

Я могу запустить вышеописанное с помощью system(). Теперь я хочу запустить тех, кто прячет консоль. Я нашел много подобных вопросов и сказал, что CreateProcess может сделать.

Вот мой код:

void system_hide(char *cmd)
{
    STARTUPINFOW si;
    PROCESS_INFORMATION pi;

    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    ZeroMemory(&pi, sizeof(pi));

    if (CreateProcessW(NULL, cmd, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi))
    {
    WaitForSingleObject(pi.hProcess, INFINITE);
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);

    }
}

Он работает неправильно,

Я предполагаю, что параметры CreateProcess неверны.

Надеюсь на правильную версию. Заранее спасибо.


person chenzhongpu    schedule 11.01.2015    source источник
comment
кстати, параметр cmd в system_hide относится к broadcastStop,....   -  person chenzhongpu    schedule 11.01.2015
comment
Вы знаете, что означает W в CreateProcessW? Вы обращаете внимание на предупреждения компилятора?   -  person n. 1.8e9-where's-my-share m.    schedule 11.01.2015
comment
W означает юникод-версию этой функции, правильно? Код будет скомпилирован в dll, поэтому я не могу просмотреть подробную информацию о времени выполнения.   -  person chenzhongpu    schedule 11.01.2015
comment
Да. Но вы пытаетесь передать ему строку ANSI.   -  person Ari0nhh    schedule 11.01.2015
comment
большое спасибо. Я изменил CreateProcessW на CreateProcess, и это работает.   -  person chenzhongpu    schedule 11.01.2015