首页系统综合问题「createprocess」createprocess error 193

「createprocess」createprocess error 193

时间2022-07-16 18:11:49发布分享专员分类系统综合问题浏览188

今天小编给各位分享createprocess的知识,文中也会对其知识点进行延伸解释,如果文章内容对您有帮助,别忘了关注本站,现在进入正文!

内容导航:

  • 怎样用createprocess运行另外一个程序?
  • createprocess失败 代码2 怎么解决
  • 关于createprocess的使用
  • CreateProcess的前两个参数究竟怎么用
  • 用createprocess函数创建进程的意义是什么?
  • 怎么调试CreateProcess创建的进程命令行
  • 一、怎样用createprocess运行另外一个程序?

    我们可以利用CreateProcess API函数来创建相应的进程,该函数的原型如下: CreateProcess(LPCWSTR lpszImageName, //指向可执行的模块的指针LPCWSTR lpszCmdLine, //指向可执行命令行字符串的指针LPSECURITY_ATTRIBUTES lpsaProcess, //CE 不支持LPSECURITY_ATTRIBUTES lpsaThread, //CE 不支持BOOL fInheritHandles, //CE 不支持DWORD fdwCreate, //创建标志LPVOID lpvEnvironment, //CE 不支持LPWSTR lpszCurDir, //CE 不支持LPSTARTUPINFOW lpsiStartInfo, //CE 不支持LPPROCESS_INFORMATION lppiProcInfo //指向进程信息结构体的指针); 该函数最重要的两个参数是lpszImageName和lpszCmdLine,下面的几个应用也主要是通过设置这两个参数来达到目的。(以下的程序在Pocket PC 2003 SE上通过测试) 1、打开指定的URL TCHAR szAppName[_MAX_PATH] = TEXT("iexplore.exe");//IE浏览器程序TCHAR szCmdLine[_MAX_PATH] = TEXT(" "); CreateProcess(szAppName,szCmdLine, NULL, NULL,FALSE, 0, NULL, NULL, NULL, NULL); 2、打开指定的文件夹 TCHAR szAppName[_MAX_PATH] = TEXT("fexplore.exe");//资源管理器程序 TCHAR szCmdLine[_MAX_PATH] = TEXT(\\\\Windows\\\\); CreateProcess(szAppName,szCmdLine, NULL, NULL,FALSE, 0, NULL, NULL, NULL, NULL); 3、打开帮助文件 PROCESS_INFORMATION pi; TCHAR szAppName[_MAX_PATH] = TEXT("peghelp.exe");//系统帮助程序,PC上是在c:\\WINDOWS目下的winhlp32.exe TCHAR szCmdLine[_MAX_PATH] = TEXT("myhelp.html");//自己制作的帮助文档,甚至是系 //统原有的帮助文件,如wince.htm、bluetooth.htm等等。myhelp.html应该放在\\Windows目录下 CreateProcess(szAppName,szCmdLine, NULL, NULL,FALSE, 0, NULL, NULL, NULL, &pi); 通过以上的方式,可以在自己的应用程序里打开相应的帮助文件。 从以上的3种应用可以看出,只要知道系统自带的应用程序名,就可以通过设定szAppName和szCmdLine相应的值,来调用相应的程序,来达到自己想要的目的。只要认真挖掘,一定可以发现更多的应用。

    二、createprocess失败 代码2 怎么解决

    使用CFileDialog选择文件了以后,会在其内部调用“SetCurrentDirectory“设置被选择文件的目录为当前路径。

    因此如果文件和程序不在同一路径,那么CreateProcess使用内部调用的相对路径就可能找不到对应程序,所以导致createprocess出现错误代码2的情况。解决办法是CreateProcess使用可执行文件的绝对路径便可以解决文件和程序不在同一路径的问题。

    扩展资料:

    CreateProcess部分参数含义

    1、lpApplicationName

    指向一个NULL结尾的、用来指定可执行模块的字符串。

    这个字符串可以是可执行模块的绝对路径,也可以是相对路径,在后一种情况下,函数使用当前驱动器和目录建立可执行模块的路径。

    这个参数可以被设为NULL,在这种情况下,可执行模块的名字必须处于 lpCommandLine 参数最前面并由空格符与后面的字符分开。

    2、lpCommandLine

    指向一个以NULL结尾的字符串,该字符串指定要执行的命令行。这个参数可以为空,那么函数将使用lpApplicationName参数指定的字符串当做要运行的程序的命令行。

    如果lpApplicationName和lpCommandLine参数都不为空,那么lpApplicationName参数指定将要被运行的模块,lpCommandLine参数指定将被运行的模块的命令行。

    「createprocess」createprocess error 193

    新运行的进程可以使用GetCommandLine函数获得整个命令行。C语言程序可以使用argc和argv参数。

    3、lpProcessAttributes

    指向一个SECURITY_ATTRIBUTES结构体,这个结构体决定是否返回的句柄可以被子进程继承。如果lpProcessAttributes参数为空(NULL),那么句柄不能被继承。

    在Windows NT中:SECURITY_ATTRIBUTES结构的lpSecurityDescriptor成员指定了新进程的安全描述符,如果参数为空,新进程使用默认的安全描述符。

    4、lpThreadAttributes

    同lpProcessAttribute,不过这个参数决定的是线程是否被继承,通常置为NULL。

    三、关于createprocess的使用

    对于CreateProcess函数的后两个参数你不能简单的定义为NULL,你可以参看MSDN对这个函数的说明,倒数第二个参数必须要有你提供。它是一个STARTUPINFO结构体的指针,这个结构体对象一定要有你自己提供最后一个参数你也必须自己提供,它是一个PROCESS_INFORMATION类型的指针也就是:STARTUPINFO st;PROCESS_INFORMATION pi:eroMemory(&si,sizeof(si)); si.cb=sizeof(si); ZeroMemory(&pi,sizeof(pi));然后调用函数CreateProcess("D:\\QQ\\Bin\\QQ.exe", NULL, NULL,NULL, NULL, NULL,NULL, NULL,&si,&pi);或者CreateProcess(NULL,"D:\\QQ\\Bin\\QQ.exe", NULL, NULL,NULL, NULL, NULL,NULL, &si,&pi)这样就可以了。这样虽然可以正常的运行,但是最好的习惯是打开一个进程之后,我们要将该程序与进程断开连系,调用CloseHandle函数实现。

    四、CreateProcess的前两个参数究竟怎么用

    用CreateProcess创建的子进程所获得的命令行参数有以下几种情况: 1.子进程中,WinMain函数的第三个参数lpCmdLine表示的命令行参数中除去应用程序路径、文件名以及与参数相隔的空格等字符串后的内容。比如父进程: CreateProcess(NULL, “ -p“, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); 子进程中,lpCmdLine参数为-p,注意没有双引号 2.如果通过lpCmdLine参数查看命令行参数,那么父进程创建子进程的时候,需要在子程序和参数中加上空格号。比如:父进程: CreateProcess(“ -p“, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); 子进程中,lpCmdLine参数为-p,没有空格了。 3.如果想获得子进程的完整命令行参数,调用GetCommandLine函数。通常通过GetCommandLine函数获得的命令行参数,是父进程调用时的完整参数。 CreateProcess(NULL, “ -p“, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); 子进程中,GetCommandLine返回的参数为 -p,注意没有双引号以下情况都是调用GetCommandLine函数获得命令行参数 4.CreateProcess第一个参数是NULL,第二个参数指定子应用程序和命令行参数,那么子...

    五、用createprocess函数创建进程的意义是什么?

    是windows调用的createprocess函数,并不是没有用createprocess函数。《windows程序设计》摘抄:操作系统事实上并不是真的调用main函数,而是去调用C/C++运行期启动函数,此函数初始化C/C++运行期库。因此,在应用程序中可以调用malloc和free之类的函数。它也会保证在用户的代码执行之前所有的全局的或静态的C++对象能够被正确的创建,即执行这些对象构造函数中的代码。组成Win32进程的两个部分:(1)进程内核对象。操作系统使用此内核对象来管理进程,也是操作系统存放进程统计信息的地方。(2)私有的虚拟地址空间。此地址空间包含了所有可执行的或者是DLL模块的代码和数据,它也是程序动态申请内存的地方,比如说线程堆栈和进程堆。在控制台应用程序中,C/C++运行期启动函数会调用程序入口函数main,所以如果程序中没有main函数的实现代码的话,连接器将返回“unresolved external symbol”错误。Win32应用程序的启动过程就是进程的创建过程,操作系统是通过调用CreateProcess函数来创建新的进程的。当一个线程调用CreateProcess函数的时候,系统会创建一个进程内核对象,其使用计数初始化为1.此进程内核对象不是进程本身,仅仅是一个系统用来管理这个进程的一个小的数据结构(PCB,Process Control Block)。系统然后会为新的进程创建一个虚拟地址空间,加载应用程序运行时所需的代码和数据。系统接着会为新进程创建一个主线程,这个主线程通过执行C/C++运行期启动代码开始运行,C/C++运行期启动代码又会调用main函数。如果系统能够成功创建新的进程和进程的主线程,CreateProcess函数返回TRUE,否则返回FALSE。

    六、怎么调试CreateProcess创建的进程命令行

    用CreateProcess创建的子进程所获得的命令行参数有以下几种情况:1.子进程中,WinMain函数的第三个参数lpCmdLine表示的命令行参数中除去应用程序路径、文件名以及与参数相隔的空格等字符串后的内容。比如父进程:CreateProcess(NULL, “ -p“, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);子进程中,lpCmdLine参数为-p,注意没有双引号2.如果通过lpCmdLine参数查看命令行参数,那么父进程创建子进程的时候,需要在子程序和参数中加上空格号。比如:父进程:CreateProcess(“ -p“, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);子进程中,lpCmdLine参数为-p,没有空格了。3.如果想获得子进程的完整命令行参数,调用GetCommandLine函数。通常通过GetCommandLine函数获得的命令行参数,是父进程调用时的完整参数。CreateProcess(NULL, “ -p“, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);子进程中,GetCommandLine返回的参数为 -p,注意没有双引号以下情况都是调用GetCommandLine函数获得命令行参数4.CreateProcess第一个参数是NULL,第二个参数指定子应用程序和命令行参数,那么子进程的命令行参数是第二个参数,不带双引号。比如:父进程:CreateProcess(NULL, “ -p“, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);子进程中,GetCommandLine获得的命令行参数为 -p5.CreateProcess第一个参数指定子应用程序路径和文件名,第二个参数为NULL,那么子进程的命令行参数是第一个参数,带双引号。比如:父进程:CreateProcess(“ NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);子进程中,GetCommandLine获得的命令行参数为”第一个参数指定子应用程序路径和文件名,第二个参数为传递给子进程的参数,那么子进程的命令行参数是第二个参数,不带双引号。比如:父进程:CreateProcess(“ ”-p“, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);子进程中,GetCommandLine获得的命令行参数为-p。此处注意同第二点比较,如果用lpCmdLine查看命令行参数,没什么都没有。但是将”-p”改成” -p”,用可以看到参数是-p,是不是很混乱?

    关于createprocess的问题,通过《怎样用createprocess运行另外一个程序?》、《关于createprocess的使用》等文章的解答希望已经帮助到您了!如您想了解更多关于createprocess的相关信息,请到本站进行查找!

    爱资源吧版权声明:以上文中内容来自网络,如有侵权请联系删除,谢谢。

    createprocess
    win10鼠标主题下载器是可以通过拖动及调整大小的 win7更新系统win10