关于CreateProcess的使用问题

来源:百度知道 编辑:UC知道 时间:2024/05/25 08:09:33
想使用CreateProcess创建一个进程,运行一个程序TestMessageBox.exe(双击运行弹出一个消息窗口)
调用CreateProcess时,发现一些问题,尤其是前两个参数的赋值上,下面是几种调用(省略了si和pi两个结构的声明):
CreateProcess(NULL, "TestMessageBox.exe", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);/*可行,TestMessageBox.exe文件放在当前运行目录下*/
CreateProcess
(NULL, "D:\project\TestMessageBox\TestMessageBox\Debug\TestMessageBox.exe", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);/*TestMessageBox.exe文件不在当前运行目录,使用绝对路径,为什么不行?*/
CreateProcess("TestMessageBox.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);/*不可行,TestMessageBox.exe文件文件放在当前运行目录下,为什么不行?*/
CreateProcess("D:\project\TestMessageBox\TestMessageBox\Debug\TestMessageBox.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);/*TestMessageBox.exe文件不在当前运行目录,使用绝对路径,为什么不行?*/
当使用绝对路径时,将倒数第三个参数换为"D:\project\TestMessageBox\TestMessageBox\Debug"也不行啊,第一个参数和第二个参数到底区别在哪儿,上面后三种方法为什么不行啊

CreateProcess 的第一个参数是文件映像位置,第二个参数是命令行。用第一个参数肯定能启进程,第二个参数有时候有问题;我遇到过使用第二个参数起不来进程的问题,也是莫名其妙。MSDN的例子可能会误导人。

CreateProcess("TestMessageBox.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); 这个不行应该是当前路径不是文件所在位置,因为调试程序的当前路径有时候不是debug目录,而是debug上一层。

CreateProcess("D:\project\TestMessageBox\TestMessageBox\Debug\TestMessageBox.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)这个不行就像楼上几位说的,的用“\\”

CreateProcess(NULL, "TestMessageBox.exe",.....
可以看出你的第一,二个参数都是错的.第一个参数只有TestMessageBox.exe是16位程序时才为NULL.而现在的NT(2000或XP)都是32位的,所以显然TestMessageBox.exe是一个win32程序,所以第一个参数不可能为NULL.应该是:
CreateProcess("TestMessageBox.exe",NULL,......
至于路径不必指定,windows会自动从系统注册的环境变量里寻找系统路径下有没有,如果没有再依此寻找其它路径,直到找到.

CreateProcess("D:\\project\\TestMessageBox\\TestMessageBox\\Debug\\TestMessageBox.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);/