1. ホーム
  2. c++

[解決済み] CreateProcess Failed, unexpected error [closed].

2022-02-16 19:10:03

質問

プロセス(calc.exe)を作成しようとしましたが、プログラムが正しく実行されません。起動後、クラッシュしてしまいます。私は、問題はLPWSTR変数にあると思いますが、私はそれを修正する方法を知りません。

以下、私のコードです。

#include "stdafx.h"
#include <Windows.h>
#include <cstdio>
#include <string>


using namespace std;

void NewProcess(LPWSTR cmd) {

    printf("Argv Inside funcion: %s\n", cmd[1]);
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

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

    if (!CreateProcess(NULL, 
        cmd,      
        NULL,  
        NULL,  
        FALSE,    
        0,             
        NULL,      
        NULL,      
        &si,         
        &pi)          
        )
    {
        printf("CreateProcess failed (%d).\n", GetLastError());
        return;
    }

    printf("Process ID: %d Started", pi.dwProcessId);

    WaitForSingleObject(pi.hProcess, INFINITE);
    printf("\nProcess ID: %d Terminated!", pi.dwProcessId);


    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
}

void main(int argc, TCHAR *argv[])
{   
    char text[] = "calc.exe";
    wchar_t wtext[20];
    mbstowcs(wtext, text, strlen(text) + 1);
    LPWSTR ptr = wtext;

    NewProcess(ptr); 
    getchar();
}

解決方法は?

あなたの printf は、コマンドの最初の文字を(ワイドでない)C文字列へのポインタとして解釈しています。

使用する

wprintf(L"Argv Inside funcion: %s\n", cmd);

と複雑にする必要はありません。 main にはマルチバイト文字はありません。 "calc.exe" だから、変換するものがない)。

int main(int argc, TCHAR *argv[])
{   
    auto application[] = L"calc.exe";
    NewProcess(application); 
    getchar();
}