双击exe时系统调用CreateProcess用的参数是什么?该怎么解决

双击exe时系统调用CreateProcess用的参数是什么?
本帖最后由 JiLuoXingRen 于 2013-06-30 01:10:25 编辑

    STARTUPINFO sinfo;
    PROCESS_INFORMATION pinfo; 
    //Not used, but needed
    ECURITY_ATTRIBUTES sec1;
    SECURITY_ATTRIBUTES sec2;

    //Set the structure size
    sec1.nLength = sizeof(sec1);
    sec2.nLength = sizeof(sec2);
    sinfo.cb = sizeof(sinfo);
    //Set the flags
    sinfo.dwFlags = STARTF_USESHOWWINDOW || STARTF_USESTDHANDLES;
    //Set the window's startup position
    sinfo.wShowWindow = start_size;

    //Start the program
    CreateProcess("C:\\Windows\\Local\\Temp\\aa\\P2PSeacher.exe", null, sec1, sec2, false, 0, 
    0, Path, sinfo, pinfo);//这里的Path前面声明了

其实这代码是VB改过来的,本来也是在VB上运行的,等效改了过来,觉得到c++的区来跟应该跟合理一点。
运行之后P2PSeacher.exe确实运行了,但是和自己双击exe来运行的有不同,这是代码运行的:
双击exe时系统调用CreateProcess用的参数是什么?该怎么解决
这是手工双击exe启动的:
双击exe时系统调用CreateProcess用的参数是什么?该怎么解决
手工启动的不需要做任何事,软件就会开始连接,但是用代码启动的不会。到底在调用CreateProcess函数时还要穿什么参数进去才能让他开始连接。

我觉得应该从一般在收到什么消息之后开始尝试连接着手,是不是我还缺少什么代码,所以缺少这个消息以至于不再连接??

其实主要的是,双击exe启动程序的时候操作系统是传递了什么参数给CreateProcess函数的?应该用系统传的参数就能解决问题了

------解决方案--------------------
我随便找了个 exe 双击, explorer.exe 调用 CreateProcess 的参数如下:

双击exe时系统调用CreateProcess用的参数是什么?该怎么解决

你对比看看能有什么发现不,
最好还是直接调试你的 P2PSeacher.exe 程序
------解决方案--------------------
我不是用的 VC, 是 OllDbg
你用 VC 试一下也可以.

Attach 系统的 explorer.exe 进程, 对 CreateProcessA 和 CreateProcessW 下断点.
然后去双击执行一个 exe 文件就会断下来,
然后就可以看堆栈上的参数了.