CreateProcess函数诡异的表现

场景:程序A使用CreateProcess函数去启动另一个程序(.exe)文件,在绝大部分情况下是可以成功启动的,但是在某些电脑上无效。

因为这“某些电脑”实在不好找,终于有一天借到一台这样的电脑。

经过多次实验发现,CreateProcess返回值总为-1,也就是成功创建了进程,而且我是用showPrompt,弹窗打印的该值,如果弹窗,就能创建进程。

最后猜想可能是因为CreateProcess之后,随即程序退出了,并不会等程序B创建完成,会不会太快了,导致电脑没反应过来。最后加了一个Sleep(5000); Delphi,程序B就能启动了。

查看了一下msdn,第一句话是这样的:The new process runs in the security context of the calling process.不知道是否与此有关。

如有知晓者,请解答,谢谢。

时间: 2024-10-15 06:33:19

CreateProcess函数诡异的表现的相关文章

关于CreateProcess函数一些经验

TCHAR szCmdLine[]={TEXT("E:\\CPL-server\\其他工具\\restartSrv\\bin\\opensavepath.exe")}; TCHAR static szCommandLine[MAX_PATH + 700] = {0}; lstrcpy(szCommandLine, pProgramPath); STARTUPINFO si = {0}; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(ST

windows - 进程 - CreateProcess函数详解

CreateProcess函数原型如下: [cpp] view plaincopy BOOL CreateProcess( PCTSTR pszApplicationName, PTSTR pszCommandLine, PSECURITY_ATTRIBUTES psaProcess, PSECURITY_ATTRIBUTES psaThread, BOOL bInheritHandles, DWORD fdwCreate, PVOID pvEnvironment, PCTSTR pszCurD

CreateProcess函数

调用CreateProcess函数来创建一个进程: 一个线程调用CreateProcess时,系统将创建一个进程内核对象,其初始使用计数为1.进程内核对象不是进程本身,而是操作系统用来管理这个进程的一个小型数据结构--可以把进程内核对象想象成由进程统计信息构成的一个小型数据结构.然后,系统为新进程创建一个虚拟地址空间,并将可执行文件(和所有必要的DLL)的代码及数据加载到进程的地址空间 然后,系统为新进程的主线程创建一个线程内核对象(其使用计数为1).和进程内核对象一样,线程内核对象也是一个小型

CreateProcess函数具体解释

CreateProcess说明:WIN32API函数CreateProcess用来创建一个新的进程和它的主线程,这个新进程执行指定的可执行文件. 函数原型:BOOL CreateProcess(    LPCTSTR lpApplicationName,            LPTSTR lpCommandLine,            LPSECURITY_ATTRIBUTES lpProcessAttributes.    LPSECURITY_ATTRIBUTES lpThreadAt

CreateProcess 函数

进程的创建:可以使用CreateProcess 函数 来源:MSDN(竟然不允许MSDN链接 靠 无语) BOOL CreateProcess ( LPCTSTRlpApplicationName, LPTSTRlpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes. LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags,

CreateProcess函数回来的进程ID和任务管理器的不同

1 void Proc() 2 { 3 STARTUPINFO si = { 0 }; 4 PROCESS_INFORMATION pi = { 0 }; 5 CreateProcess("c:/windows/system32/calc.exe", "", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); 6 printf("进程ID=%d,进程句柄%d\n", pi.dwProcessI

++z作为函数参数的表现

int sum(int x,int y,int z){     int result=x+2*y+3*z;     cout<<"x:"<<x<<"  "<<"y:"<<y<<"  "<<"z:"<<z<<endl;     return result; }     int result=sum(++

[转]vc中调用其他应用程序的方法(函数) winexec,shellexecute ,createprocess

三个SDK函数: WinExec,ShellExecute ,CreateProcess可以实现调用其他程序的要求,其中以WinExec最为简单,ShellExecute比WinExec灵活一些,CreateProcess最为复杂.    WinExec 两个参数,前一个指定路径,后一个指定显示方式.    ShellExecute 可以指定工作目录,并且还可以寻找文件的关联直接打开不用加载与文件关联的应用程序,ShellExecute还可以打开网页,启动相应的邮件关联发送邮件等等.    Cr

JavaScript中的函数表达式

在JavaScript中,函数是个非常重要的对象,函数通常有三种表现形式:函数声明,函数表达式和函数构造器创建的函数. 本文中主要看看函数表达式及其相关的知识点. 函数表达式 首先,看看函数表达式的表现形式,函数表达式(Function Expression, FE)有下面四个特点: 在代码中须出现在表达式的位置 有可选的函数名称 不会影响变量对象(VO) 在代码执行阶段创建 下面就通过一些例子来看看函数表达式的这四个特点. FE特点分析 例子一:在下面代码中,"add"是一个函数对象