我有一个关于我滥用CreateProcess的症状的问题。我正在使用lpcommandline参数来提供可执行文件和参数的路径。我的误用是我没有用引号将exe的路径括起来。

我的问题是,为什么CreateProcess在大多数计算机而不是其他计算机上都能正常工作?我知道路径在大多数情况下都会有空间,但是在90%的XP机器上都可以使用。我当然发现了那10%没有解决的问题。但是我想知道在无法正常工作的计算机上有什么区别?是否有你们大家都知道的设置或政策。是的,我将解决报价问题。只是好奇为什么这样的事情不会成功。

因此,代码如下所示,而szCommandLine参数则如下所示。请注意,exe路径周围没有引号。

“C:\ Program Files \ My Company \ doit.exe parameter1 parameter2”

CreateProcess(
    NULL,
    szCommandLine,
    NULL,
    NULL,
    FALSE,
    NULL,
    NULL,
    NULL,
    &si,
    &pi )

最佳答案

正如马丁·约克(Martin York)所链接的文档所暗示的那样,CreateProcess()具有一些与预长名称程序向后兼容的行为。

“c:\ program files \ sub dir \ program name arg1 arg2”将查找:



因此,如果存在这些文件中的任何一个,Windows将调用它们,而不是您的程序。此外,我假设如果您没有对这些可能的匹配项所在的任何文件夹的读取权限,则CreateProcess()可能会立即失败,而不是检查您是否已读取了以后的可能匹配项。 (Windows默认情况下只检查对最终文件夹的读取访问。)

关于c++ - 路径和CreateProcess,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/265650/

10-13 08:30