这里先描述一下遇到的问题:
共有2个进程, 进程A, 进程B. A通过CreateProcess来启动进程B, 启动的时候带有参数, 参数是一长串字符串, 里面就是用逗号隔开的一些IP地址.
起初一直都没有事, 一直到1年多以后, 当这个IP地址的数量是17, 在增加一个到18, 那么这个程序立即就出问题, 这里的这个程序指的是A. 弹出windows错误框, 是说程序在某处发生异常.
最后通过各种办法监测到这个错误是在RenderFile时出的错. 当IP数量小于等于17就没有事,一旦大于就出问题.后来想是不是我把那些命令行中的IP写到本地数组时越界导致, 后来检查不是.后来想大于和小于到底有什么区别呢? 区别就是创建进程的命令行参数不一样长. 于是就把传IP的方式改变一下, 用WM_COPYDATA来传递. 发现果然可以了.
这就很奇怪, 明明创建的时候成功了, 并且页能从命令行参数中正确地解析出所有IP, 可是一运行程序就出错.上网查资料看看对命令行参数地长度有没有限制, 有人说有, 有人说没有. 有些说是128, 有人说只要不超过cstring地长度就可以, 还有人说不超过2G就可以. 我大概计算了这个问题中命令行参数地长度, 17 IP地时候没有超过256, 而18 IP时, 就超过了. 所以我的结论是, 在用CreateProcess创建进程时命令行参数不能超过256字符.
至于为什么当超过256, 会导致这个问题中的那个错误暂不做研究.
版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.