CreateProcess() 函数不能 运行。错误无法写入内存
CreateProcess() function cannot run. Error The memory could not be written
我正在使用 Windows 8 x64 企业版,VS2010。
我在 CreateProcess()
上遇到了一些问题。
我创建了一个 Win32 控制台项目来执行我的应用程序 _backround_manipulator.exe
。
这里实现。
#include "stdafx.h"
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
DWORD RunManipulator(TCHAR* tszProcessPath);
int _tmain(int argc, _TCHAR* argv[])
{
_tprintf(_T("---Manipulator will start...---\n"));
if(0x08 == RunManipulator(_T("_background_manipulator.exe")))
_tprintf(_T("---Manipulator Started.---\n"));
else
_tprintf(_T("---Manipulator cannot run.---\n"));
return 0;
}
DWORD RunManipulator(TCHAR* tszProcessPath)
{
STARTUPINFO _v_startupinfo;
PROCESS_INFORMATION _v_processinfo;
ZeroMemory(&_v_startupinfo, sizeof(STARTUPINFO));
ZeroMemory(&_v_processinfo, sizeof(PROCESS_INFORMATION));
_v_startupinfo.cb = sizeof(STARTUPINFO);
if (!CreateProcess(NULL, tszProcessPath, NULL, NULL, FALSE, 0, NULL, NULL, &_v_startupinfo, &_v_processinfo));
{
return 0x12;
}
return 0x08;
}
但无法在 debug
模式下传递 CreateProcess(NULL, tszProcesPath, /*...*/)
功能。
错误像这样;
我的代码有什么问题?
是因为我创建了控制台项目吗?
如果查找 CreateProcess
的定义
BOOL WINAPI CreateProcess(
_In_opt_ LPCTSTR lpApplicationName,
_Inout_opt_ LPTSTR lpCommandLine,
...
我们可以注意到 lpCommandLine 定义为 In-out 参数而不定义为 const 指针(与 lpApplicationName 这是常量指针 LPCTSTR)
和:
The Unicode version of this function, CreateProcessW, can modify
the contents of this string. Therefore, this parameter cannot be a
pointer to read-only memory (such as a const variable or a
literal string). If this parameter is a constant string, the function may cause an access violation.
但您确实将 文字字符串 _T("_background_manipulator.exe")
作为 lpCommandLine 传递。并得到异常结果 - 无法写入内存
我正在使用 Windows 8 x64 企业版,VS2010。
我在 CreateProcess()
上遇到了一些问题。
我创建了一个 Win32 控制台项目来执行我的应用程序 _backround_manipulator.exe
。
这里实现。
#include "stdafx.h"
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
DWORD RunManipulator(TCHAR* tszProcessPath);
int _tmain(int argc, _TCHAR* argv[])
{
_tprintf(_T("---Manipulator will start...---\n"));
if(0x08 == RunManipulator(_T("_background_manipulator.exe")))
_tprintf(_T("---Manipulator Started.---\n"));
else
_tprintf(_T("---Manipulator cannot run.---\n"));
return 0;
}
DWORD RunManipulator(TCHAR* tszProcessPath)
{
STARTUPINFO _v_startupinfo;
PROCESS_INFORMATION _v_processinfo;
ZeroMemory(&_v_startupinfo, sizeof(STARTUPINFO));
ZeroMemory(&_v_processinfo, sizeof(PROCESS_INFORMATION));
_v_startupinfo.cb = sizeof(STARTUPINFO);
if (!CreateProcess(NULL, tszProcessPath, NULL, NULL, FALSE, 0, NULL, NULL, &_v_startupinfo, &_v_processinfo));
{
return 0x12;
}
return 0x08;
}
但无法在 debug
模式下传递 CreateProcess(NULL, tszProcesPath, /*...*/)
功能。
错误像这样;
我的代码有什么问题? 是因为我创建了控制台项目吗?
如果查找 CreateProcess
BOOL WINAPI CreateProcess(
_In_opt_ LPCTSTR lpApplicationName,
_Inout_opt_ LPTSTR lpCommandLine,
...
我们可以注意到 lpCommandLine 定义为 In-out 参数而不定义为 const 指针(与 lpApplicationName 这是常量指针 LPCTSTR)
和:
The Unicode version of this function, CreateProcessW, can modify the contents of this string. Therefore, this parameter cannot be a pointer to read-only memory (such as a const variable or a literal string). If this parameter is a constant string, the function may cause an access violation.
但您确实将 文字字符串 _T("_background_manipulator.exe")
作为 lpCommandLine 传递。并得到异常结果 - 无法写入内存