未处理的错误与CreateProcess的[复制](Unhandled Error with Cre

2019-06-23 10:32发布

这个问题已经在这里有一个答案:

  • CreateProcess的方法结束了一个错误 1回答

我在读有关CreateProcess函数在C ++中,我想尝试一下。 代码的基本想法是让我的主要执行另一个进程(记事本)。 真的,这只是基本的代码。 当我运行该程序,我得到:

0000005:访问冲突写入位置0x00be57b8在0x752bb763在createprocess.exe第一次机会异常。
在0x752bb763在createprocess.exe未处理的异常:0000005:访问冲突写入位置0x00be57b8。

当我为发生错误一个破发点,我被带到tidtable.c(这是访问的线程,我猜)。 特别是在tidtable.c CRTIMP PFLS_GETVALUE_FUNCTION __cdecl __set_flsgetvalue()我真的不知道是什么或如何避免这个问题。 与CreateProcess的呼叫(即,它从来没有输出“出创建”)时发生错误。

我的代码是:

#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#include <strsafe.h>
#include <direct.h>
#include <string.h>
#include <conio.h>

int main(VOID)
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

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


fprintf(stderr, "This is just a test");

//create child process
if (!CreateProcess(NULL,
    L"C:\\Windows\\Notepad.exe",
    NULL,
    NULL,
    FALSE,
    0,
    NULL,
    NULL,
    &si,
    &pi))
{
        fprintf(stderr, "create process failed");

        return -1;
}
fprintf(stderr, "out of create");

    //parent waits for child to complete
WaitForSingleObject(pi.hProcess, INFINITE);

fprintf(stderr, "after wait");

printf("Child Complete");

    //close handle
CloseHandle(pi.hProcess);
//  CloseHandle(pi.hthread);

}

如果有人知道如何解决这个问题,你的帮助,将不胜感激。

Answer 1:

的问题是,所述的第二个参数的CreateProcess函数是一个输入/输出参数。

如果你将它指定为一个字符串,像你这样,它是一个字符串常量,当它被称为无法写入内存位置的功能,因此你有一个内存访问冲突。 正确的方法是调用你的函数是这样的:

LPTSTR szCmdline = _tcsdup(TEXT("C:\\Windows\\Notepad.exe"));

//create child process
if (!CreateProcess(NULL,
    szCmdline,
    NULL,
    NULL,
    FALSE,
    0,
    NULL,
    NULL,
    &si,
    &pi))
{
    fprintf(stderr, "create process failed");

    return -1;
}

您可能还需要阅读该博客文章 。



Answer 2:

因为FUNC试图修改字符串的第2 ARG给CreateProcess不能是常量或文本字符串。 字面复制到本地阵列,然后通过,作为第二ARG。



文章来源: Unhandled Error with CreateProcess [duplicate]