จะใช้ 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 หมายถึง เวอร์ชัน Unicode ของฟังก์ชันนี้ ใช่ไหม ? รหัสจะถูกคอมไพล์เป็น dll ดังนั้นฉันจึงไม่สามารถดูข้อมูลรายละเอียดรันไทม์ได้   -  person chenzhongpu    schedule 11.01.2015
comment
ใช่. แต่คุณกำลังพยายามส่งผ่านสตริง ANSI ไปให้   -  person Ari0nhh    schedule 11.01.2015
comment
ขอบคุณมาก. ฉันเปลี่ยน CreateProcessW เป็น CreateProcess และใช้งานได้   -  person chenzhongpu    schedule 11.01.2015