none
命令行是什么? RRS feed

答案

全部回复

  • 你好!
       《Windows核心编程》中有很相关的论述的:
    当CreateProcess解析pszCommandLine字符串时,它会检查字符串中的第一个标记(token).并假定此标记是你想运行的执行体文件的名称/如果执行体文件的名称没有扩展名.就会默认是.exe扩展名/CreateProcess还会按照以下顺序搜索执行体:
    1.主调进程.EXE文件所在的目录
    2.主调进程的当前目录
    3.Windows系统目录,即GetSystemDirectory返回的System32子文件夹
    4.Windows目录
    5.PATH环境变量中列出的目录

    2009年1月27日 10:39
    版主
  • 也就是说pszCommandLine保存的是进程的可执行文件的名称,而pszApplicationName则是进程的名称吗?

    一般情况下是不是这两个变量的内容一样?


    另外:这个搜索顺序好像是XP以前的Windows的搜索顺序吧
    2009年1月27日 11:54
  • 不是这个意思啊,你可能有些误会,我详细说说:
    pszApplicationName和pszCommandLine参数分别用于设定新进程将要使用的可执行文件的名字和传递给新进程的命令行字符串
      pszCommandLine参数的原型是PTSTR。这意味着CreateProcess期望你将传递一个非常量字符串的地址。从内部来讲,CreateProcess实际上并不修改你传递给它的命令行字符串。不过,在CreateProcess返回之前,它将该字符串恢复为它的原始形式。
      如果命令行字符串不包含在文件映象的只读部分中,就会出现违规访问的问题。解决这个问题的最好办法是在调用CreateProcess之前像下面这样将常量字符串拷贝到临时缓存中。当CreateProcess分析pszCommandLine字符串时,它将查看字符串中的第一个标记,并假设该标记是想运行的可执行文件的名字。如果可执行文件的文件名没有扩展名,便假设它的扩展名为.exe。CreateProcess也按下面的顺序搜索该可执行文件:
      1) 包含调用进程的. e x e文件的目录。
      2) 调用进程的当前目录。
      3) Wi n d o w s的系统目录。
      4) Wi n d o w s目录。
      5) PAT H环境变量中列出的目录。
      如果文件名包含全路径,系统将使用全路径来查看可执行文件,并且不再搜索这些
      目录。如果系统找到了可执行文件,那么它就创建一个新进程,并将可执行文件的代码和数据
      映射到新进程的地址空间中。然后系统将调用C / C + +运行期启动例程。
      这一切都是在pszApplicationName参数是NULL(99%以上的时候都应该属于这种情况)时
      发生的。如果不传递NULL,可以将地址传递给pszApplicationName参数中包含想运行的可执行
      文件的名字的字符串。请注意,必须设定文件的扩展名,系统将不会自动假设文件名有一
      个.exe扩展名。CreateProcess假设该文件位于当前目录中,除非文件名前面有一个路径。如果在当前目录中找不到该文件,CreateProcess将不会在任何其他目录中查找该文件,它运行失败了。

    2009年1月27日 12:51
    版主
  • 传递给新进程的命令行字符串

    也就是可执行文件的路径?
    本人愚笨~~
    2009年1月28日 0:35
  • 不是这个意思啊!
    类似于 csc.exe /target:library asdf.cs
    2009年1月28日 2:27
    版主
  • 原来如此……
    2009年1月28日 2:42
  • 太好了!终于明白了啊!
    祝愿你新年快乐,身体健康!

    2009年1月28日 3:30
    版主
  • 谢谢你不厌其烦
    2009年1月28日 12:38