我一直在使用CreateProcess Win API,并且想知道使用lpApplicationName和lpCommandLine作为参数v.s的区别是什么。只是lpCommandLine参数。

例如:

CreateProcess(NULL, L"C:\Path\To\Notepad.exe", L"C:\Path\To\File\To\Load.txt"... etc
CreateProcess(NULL, NULL, L"C:\Path\To\Notepad.exe C:\Path\To\File\To\Load.txt"... etc

我假设第二个选项仅使用lpCommandLine,就像打开cmd.exe并运行该行一样。但是第一行呢,是加载应用程序并以不同方式指定命令行参数吗?

我看过有关该API的MSDN文档,但是它似乎并没有真正详细说明正在发生的事情,该参数可以包含的内容,这很好,但是我只是对在那里应该做什么感到困惑有多种方法可以做到。

请注意,我知道这两个示例行可能不起作用,因为lpCommandLine需要LPTSTR,而不是LPCTSTR。它只是为了易于理解。

非常感谢您的帮助!

安迪

最佳答案

推荐的方法是同时使用两个参数。如果不指定lpApplicationName,则让Windows解析lpCommandLine以确定应用程序名称。由于空格是文件名和目录名中的有效字符,因此(在极少数情况下)这可能导致运行错误的应用程序。 (例如,如果您拥有c:\ program.exe,并且在Windows XP中启动了位于c:\ program文件下的程序)。

在这两种情况下,都应在lpCommandLine中使用应用程序名称,因为该名称用于计算Argv [0]。

10-05 20:09