我必须使用Windows API使用Visual Studio编写一个简单的程序。我的代码在调试模式下运行良好,但是,在发布模式下运行不正常,我不知道为什么。我剪切并粘贴了程序崩溃的部分。这就是那部分。
#include <stdio.h>
#include <stdlib.h>
#include <tchar.h>
#include <windows.h>
int _tmain(int argc, TCHAR * argv[])
{
TCHAR cmdString[] = "notepad.exe";
STARTUPINFO si = { 0, };
PROCESS_INFORMATION pi;
si.cb = sizeof(si);
BOOL ret = TRUE;
CreateProcess(NULL, cmdString, NULL, NULL, TRUE,
CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
_tprintf(_T("Error = {%d}\n", GetLastError()));
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
system("pause");
return 0;
}
一个打开notepad.exe的简单程序,对吗?在调试模式下可以很好地工作,但是记事本无法在发行模式下打开(程序不打开notepad.exe就会结束)。
我试图在S.O中寻找解决方案,例如this link,但这并没有太大帮助。
为什么CreateProcess()在发布模式下无法正常工作?
答案 0 :(得分:2)
我的猜测是,所有这些都与编译器优化有关,因为this post可以告诉您比我更好的方法。
由于CreateProcess返回(成功返回)非零。
尝试以这种方式使用它:
BOOL ret = TRUE;
if(!CreateProcess(NULL, cmdString, NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi))
printf("Error = {%d}", GetLastError());
ret = FALSE;
您甚至会获得有关该错误的一些详细信息。