首页
社区
课程
招聘
[求助]CreateProcess怎么创建桌面上的EXE进程
发表于: 2015-10-31 22:45 3404

[求助]CreateProcess怎么创建桌面上的EXE进程

2015-10-31 22:45
3404
其他地方的都行 比如C盘、文档 里都可以唯独桌面这些地方不行
C++代码如下
	TCHAR szBuffer[MAX_PATH] = { 0 };
	OPENFILENAME ofn = { 0 };
	ofn.lStructSize = sizeof(ofn);
	ofn.hwndOwner = NULL;
	ofn.lpstrFilter = _T("Exe文件(*.exe)\0*.exe\0所有文件(*.*)\0*.*\0");//要选择的文件后缀   
	ofn.lpstrInitialDir = _T("D:\\Program Files");//默认的文件路径   
	ofn.lpstrFile = szBuffer;//存放文件的缓冲区   
	ofn.nMaxFile = sizeof(szBuffer) / sizeof(*szBuffer);
	ofn.nFilterIndex = 0;
	ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_EXPLORER;//标志如果是多选要加上OFN_ALLOWMULTISELECT  
	BOOL bSel = GetOpenFileName(&ofn);

	
	//声明必备参数
	STARTUPINFO si;
	PROCESS_INFORMATION pi;
	//将结构中的内存的内容置零  设置结构必备参数
	ZeroMemory(&pi, sizeof(pi));


	ZeroMemory(&si, sizeof(si));
	si.cb = sizeof(si);
	
	
	if (CreateProcess(szBuffer, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi) == 0)
	{
		cout << cAppName << endl;
		getchar();
		return -1;
	}
	cout << "进程ID:" << pi.dwProcessId << "\n线程ID" << pi.dwThreadId << endl;
	getchar();
	TerminateProcess(pi.hProcess, NULL);
	return 0;

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 118
活跃值: (72)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
搞清这个并不难,你需要在创建进程的后面调用API-  GetLastError根据其返回码可以确定错误.
推测可能的原因是权限问题.因为桌面路径属于UAC权限保护路径.
2015-11-1 09:37
0
雪    币: 26
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢已经搞定,如你所说,  右键以管理员身份运行即可
2015-11-1 20:47
0
游客
登录 | 注册 方可回帖
返回
//