CreateProcess 打开Notepad.exe 本帖最后由 VisualEleven 于 2013-09-04 15:06:40 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 把notepad.exe放在currentdir路径下 STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); TCHAR szPath[MAX_PATH] = {}; GetModuleFileName(NULL, szPath, MAX_PATH); TCHAR *pPos = _tcsrchr(szPath, '\\'); *pPos = 0; if(!CreateProcess(L"C:\\windows\\system32\\notepad.exe",L" c:\\123.txt",\ NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS|CREATE_SHARED_WOW_VDM |CREATE_NEW_CONSOLE | CREATE_UNICODE_ENVIRONMENT,NULL,szPath,&si,&pi)) { //printf("Fail to create process ,error %d \n",GetLastError()); } else { // printf("Success to create Porcess ,error %d \n",GetLastError()); }}我这样使用没问题 这段程序我是在图形化的MFC里面写的,吧这段代码拿出来放到控制台下的程序就没有问题了,可以打开c:\123.txt 现在的问题是我createprocess这个函数返回成功了,没有报错,但是notepad没有打开。二楼提供的想法我之前也做了,但是仍然无效的。你们有试过在MFC的界面程序里面实现这段代码么?请帮吗试试看有没有跟我一样的现象。 试过,不行。我是在MFC程序里点击一个Button,打开文件。控制台下我也是可以打开的,就是MFC界面程序里面不行。 STARTUPINFO si = {sizeof(si)}; PROCESS_INFORMATION pi = {0}; TCHAR szCmd[MAX_PATH] = _T(" c:\\123.txt"); if(!CreateProcess(_T("C:\\windows\\system32\\notepad.exe"), szCmd,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS|CREATE_SHARED_WOW_VDM |CREATE_NEW_CONSOLE | CREATE_UNICODE_ENVIRONMENT,NULL,NULL, &si, &pi)) { CloseHandle(pi.hThread); CloseHandle(pi.hProcess); } // ********** 你的代码缺少这段**********************// STARTUPINFO Sinfo; PROCESS_INFORMATION Pinfo; ZeroMemory( &Sinfo, sizeof(Sinfo) ); Sinfo.cb = sizeof(Sinfo); ZeroMemory( &Pinfo, sizeof(Pinfo) ); // **********************************************// char szCurrentDir[MAX_PATH]; GetCurrentDirectory(MAX_PATH,szCurrentDir); if(!CreateProcess("C:\\windows\\system32\\notepad.exe"," D:\\123.txt", NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS|CREATE_SHARED_WOW_VDM | CREATE_UNICODE_ENVIRONMENT,NULL,szCurrentDir,&Sinfo,&Pinfo)) { UINT nErrCode = GetLastError(); TRACE0("Fail to create process ,error %d \n",GetLastError()); } else { printf("Success to create Porcess ,error %d \n",GetLastError()); CloseHandle(Pinfo.hProcess); CloseHandle(Pinfo.hThread); } 创建对话框、定时器、进程相结合产生的问题~! 谁知道怎么同时画两条线?教教我啊!!! vs2008支持哪些数据库啊。。。 对于MDI程序如何RemoveMenu? INSTALL SHIELD怎么才能把那个INSTALL SHIELD的字符去掉呢? __STDCALL 自动被编译成___CLRCALL 送分问题:如何更改窗口的标题 如何获得网卡的MAC地址?有无通用的办法? VS2008添加类问题 ADO可不可以不通过ODBC的数据源直接连接数据库文件,ADO是不是目前在VC下最快的数据库访问方法。 怎样区分接收到的不同的数据 OpenGL超级宝典第五版例子编译通过 运行崩溃
PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
TCHAR szPath[MAX_PATH] = {};
GetModuleFileName(NULL, szPath, MAX_PATH);
TCHAR *pPos = _tcsrchr(szPath, '\\');
*pPos = 0; if(!CreateProcess(L"C:\\windows\\system32\\notepad.exe",L" c:\\123.txt",\
NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS|CREATE_SHARED_WOW_VDM |CREATE_NEW_CONSOLE | CREATE_UNICODE_ENVIRONMENT,NULL,szPath,&si,&pi))
{
//printf("Fail to create process ,error %d \n",GetLastError());
}
else
{
// printf("Success to create Porcess ,error %d \n",GetLastError());
}
}
我这样使用没问题
现在的问题是我createprocess这个函数返回成功了,没有报错,但是notepad没有打开。
二楼提供的想法我之前也做了,但是仍然无效的。
你们有试过在MFC的界面程序里面实现这段代码么?
请帮吗试试看有没有跟我一样的现象。
我是在MFC程序里点击一个Button,打开文件。控制台下我也是可以打开的,就是MFC界面程序里面不行。
PROCESS_INFORMATION pi = {0};
TCHAR szCmd[MAX_PATH] = _T(" c:\\123.txt");
if(!CreateProcess(_T("C:\\windows\\system32\\notepad.exe"), szCmd,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS|CREATE_SHARED_WOW_VDM |CREATE_NEW_CONSOLE | CREATE_UNICODE_ENVIRONMENT,NULL,NULL, &si, &pi))
{
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
}
// ********** 你的代码缺少这段**********************//
STARTUPINFO Sinfo;
PROCESS_INFORMATION Pinfo;
ZeroMemory( &Sinfo, sizeof(Sinfo) );
Sinfo.cb = sizeof(Sinfo);
ZeroMemory( &Pinfo, sizeof(Pinfo) );
// **********************************************// char szCurrentDir[MAX_PATH];
GetCurrentDirectory(MAX_PATH,szCurrentDir);
if(!CreateProcess("C:\\windows\\system32\\notepad.exe"," D:\\123.txt",
NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS|CREATE_SHARED_WOW_VDM |
CREATE_UNICODE_ENVIRONMENT,NULL,szCurrentDir,&Sinfo,&Pinfo))
{
UINT nErrCode = GetLastError();
TRACE0("Fail to create process ,error %d \n",GetLastError());
}
else
{
printf("Success to create Porcess ,error %d \n",GetLastError());
CloseHandle(Pinfo.hProcess);
CloseHandle(Pinfo.hThread);
}