问题描述
我使用的是 Windows 8 x64 Enterprise,VS2010.
I'm using Windows 8 x64 Enterprise, VS2010.
我在 CreateProcess()
上遇到了一些问题.
I've some problem on CreateProcess()
.
我创建了一个 Win32 控制台项目来执行我的应用程序 _backround_manipulator.exe
.
I've created a Win32 Console project to execute _backround_manipulator.exe
, my application.
在这里实现.
#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,/*...*/)
函数.
But cannot pass CreateProcess(NULL, tszProcesPath, /*...*/)
function on debug
mode.
错误像这样;
我的代码有什么问题?是因为我创建了控制台项目吗?
What's wrong on my code? Is it because I created the Console Project?
推荐答案
if 查找 CreateProcess
BOOL WINAPI CreateProcess(
_In_opt_ LPCTSTR lpApplicationName,
_Inout_opt_ LPTSTR lpCommandLine,
...
我们可以注意到 lpCommandLine 定义为 In-out 参数而不定义为常量指针(与 lpApplicationName 比较,后者是常量指针 LPCTSTR)
we can note that lpCommandLine defined as In-out parameter and defined not as const pointer ( compare with lpApplicationName which is const pointer LPCTSTR)
和:
这个函数的Unicode版本,CreateProcessW,可以修改这个字符串的内容.因此,该参数不能是指向只读内存的指针(例如 const 变量或文字字符串).如果此参数是一个常量字符串,该函数可能会导致访问冲突.
但您完全将文字字符串 _T("_background_manipulator.exe")
作为 lpCommandLine 传递.并得到异常结果 - 无法写入内存
but you exactly pass literal string _T("_background_manipulator.exe")
as lpCommandLine. and got excepted result - memory could not be written
这篇关于CreateProcess() 函数无法运行.错误 无法写入内存的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!