CreateProcess

 

CreateProcess() 创建 32 位进程时的行为

例 1:

如果将 ApplicationName 参数传递,并且 CommandLine 参数为 NULL 然后 ApplicationName 参数还用作该 CommandLine。 这并不意味着您可以将其他的命令行参数传递 ApplicationName 字符串中。例如对于下面的调用将失败,出现一个"找不到文件"错误:
   CreateProcess( "c:\\MyApp.exe Param1 Param2", NULL, ... )
				
例 2:

另一方面,如果 CommandLine 参数为非 NULL,并且 ApplicationName 参数为 NULL 然后 API 试图提取 CommandLine 参数中的应用程序的名称。

情况 3:

当您将有效的字符串的指针传递给 ApplicationName 和 CommandLine 这两个参数时,将产生 CreateProcess() 函数的灵活性 (和一个可能的混淆点)。这允许您指定要执行完整的命令行传递到应用程序以及为应用程序。一个可能假定传递到创建的应用程序的命令行是该 ApplicationName 和 CommandLine 参数的复合,但这不是这种情况。如此一来 CreateProcess 由创建一个进程可以接收其.exe 名称之外的其他值作为其"argv [0]"参数。以下是生成此"异常"行为的 CreateProcess 调用的一个示例:
   CreateProcess( "c:\\MyApp.exe", "Param1 Param2 Param3", ...)
				
MyApp 的参数将作为后续:
  argv[0] == "Param1"
  argv[1] == "Param2"
  argv[2] == "Param3"
				
 

CreateProcess 执行在 16 位.exe 文件时的行为

CreateProcess() 不会强制实施 ANSI 规范的参数传递给 16-位应用程序。这将引发的方式 CreateProcess 从一个应用程序到下一个应用程序的工作并要求您知道您生成的应用程序是 16 位或 32 位的可执行文件之间不一致可能令人困惑的问题。若要进一步使问题变得复杂,CreateProcess 是在 Windows 95 和 Windows NT 中稍有不同实现。

Windows NT 行为:

如果该 CommandLine 中的第一个"参数"并不完全 ApplicationName 字符串相同,然后它将替换它之前执行应用程序。例如,如果 ApplicationName 和 CommandLine 参数,如下所示:
  CreateProcess( "c:\\MyApp16.exe", "Param1 Param2 Param3", ...)
				
次要,应用程序可以看到该命令行参数如下所示:
  argv[0] == "c:\MyApp16.exe"
  argv[1] == "Param2"
  argv[2] == "Param3"
				
Windows 95 行为:

如果该 CommandLine 中的第一个"参数"并不完全 ApplicationName 字符串相同,CreateProcess 将失败并找不到错误的文件。如此一来没有理由呈传递 NULL 作为要在 Windows 95,如果要执行一个 16 位应用程序中的 CreateProcess ApplicationName 参数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值