为什么createprocess挑程序执行?

qin_wei 2005-08-17 03:02:30
同样是应用程序,createprocess调用小点的程序就没问题,调用大点的程序就启动不起来,我传递的参数肯定没问题,因为我用它启动了1m左右的程序,当应用程序文件大于3m时候没有反映,跟踪返回值是成功,并且 processinfo里被填充的pid在任务管理器里也找不到,请问有碰到这样情况的吗?
刚发现的在vc里有这个问题,在cbuilder里没有这种情况。
...全文
164 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
qin_wei 2005-08-18
  • 打赏
  • 举报
回复
我机器是2000系统,我再找找是不是我机器的问题
mixtrue 2005-08-17
  • 打赏
  • 举报
回复
偶测试了code 没有问题可以正常工作把文件名改成dll也可以
OS:windows 2003
Dev:VS.NET
idAnts 2005-08-17
  • 打赏
  • 举报
回复
那getlasterror呢?
我这边20多兆的都能起来。
qin_wei 2005-08-17
  • 打赏
  • 举报
回复
我觉得还是文件大小的问题,我随便找个比较大的可执行文件,> 5m,都启动不起来,难道是我机器的问题?
qin_wei 2005-08-17
  • 打赏
  • 举报
回复
to idAnts(你才无聊呢) 兄
你说的方法我都试验过,无效
idAnts 2005-08-17
  • 打赏
  • 举报
回复
像你那种写法,直接当command传过去的有一种可能性运行不起来,就是路径里有空格,比如c:\\program file\\bbb\\a.exe,但是看你不是这样的情况啊。
要不你当第一个参数传过去,第二个参数设置为null,试试。
lixiaosan 2005-08-17
  • 打赏
  • 举报
回复
因为系统认为dll是不能通过这种形式打开的吧。。


改回dll试试先
qin_wei 2005-08-17
  • 打赏
  • 举报
回复
改成exe的我当然试过了,同样是不好使的,被调用的应用程序肯定没问题,手动都能起起来。
idAnts 2005-08-17
  • 打赏
  • 举报
回复
跟大小没关系。
你GetLastError看看是什么错误。
顺便问一句……你把它改为exe能运行么?
idAnts 2005-08-17
  • 打赏
  • 举报
回复
跟大小没关系。
你GetLastError看看是什么错误。
顺便问一句……你把它改为exe能运行么?
  • 打赏
  • 举报
回复
你先改回成exe试试,如果还是不行再考虑是大小的原因
qin_wei 2005-08-17
  • 打赏
  • 举报
回复
各位带红星的老大,d:\\temp\\123\\debug\\bwdecoder.dll是个可执行文件,是我自己改的名字,为的就是不让用户知道这是个程序,只不过这个程序有3m大小,为什么它就起不来呢?
idAnts 2005-08-17
  • 打赏
  • 举报
回复
对dll用LoadLibrary
idAnts 2005-08-17
  • 打赏
  • 举报
回复
你用"d:\\temp\\123\\debug\\bwdecoder.dll"不能起来?
qin_wei 2005-08-17
  • 打赏
  • 举报
回复
其他参数不变,把d:\\temp\\123\\debug\\bwdecoder.dll换成cmd.exe就能启动起来
不知道是什么原因
qin_wei 2005-08-17
  • 打赏
  • 举报
回复
SECURITY_ATTRIBUTES secatt;
secatt.nLength =sizeof(SECURITY_ATTRIBUTES);
secatt.lpSecurityDescriptor =NULL;
secatt.bInheritHandle =false;
//start info
STARTUPINFO startinfo;
memset(&startinfo, 0, sizeof(STARTUPINFO));

startinfo.cb=sizeof(STARTUPINFO);
/**/startinfo.lpReserved=NULL;
startinfo.lpDesktop=NULL;
startinfo.lpTitle=NULL;
startinfo.dwX=5;
startinfo.dwY=5;
startinfo.dwXSize=100;
startinfo.dwYSize=100;
startinfo.dwXCountChars=0;
startinfo.dwYCountChars=0;
startinfo.dwFillAttribute=0;
startinfo.dwFlags=0;
startinfo.wShowWindow=SW_SHOWNORMAL;
startinfo.cbReserved2=0;
startinfo.lpReserved2=NULL;
startinfo.hStdInput=0;
startinfo.hStdOutput=0;
startinfo.hStdError=0;

PROCESS_INFORMATION ProcessInfo;
memset(&ProcessInfo, 0, sizeof(PROCESS_INFORMATION));

int iret = ::CreateProcess(NULL,"d:\\temp\\123\\debug\\bwdecoder.dll",
//LPTSTR lpCommandLine, // pointer to command line string
NULL,//&secatt,//LPSECURITY_ATTRIBUTES lpProcessAttributes, // pointer to process security attributes
NULL,//&secatt,//LPSECURITY_ATTRIBUTES lpThreadAttributes, // pointer to thread security attributes
false,//BOOL bInheritHandles, // handle inheritance flag
NORMAL_PRIORITY_CLASS,//DWORD dwCreationFlags, // creation flags
NULL,//LPVOID lpEnvironment, // pointer to new environment block
"d:\\temp\\123\\debug",//LPCTSTR lpCurrentDirectory, // pointer to current directory name
&startinfo,//LPSTARTUPINFO lpStartupInfo, // pointer to STARTUPINFO
&ProcessInfo//LPPROCESS_INFORMATION lpProcessInformation // pointer to PROCESS_INFORMATION
);
DentistryDoctor 2005-08-17
  • 打赏
  • 举报
回复
没有遇到过。贴出你的代码来。

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧