none
关于CreateProcess第二个参数lpCommandLine中有多个特殊字符的问题 RRS feed

  • 问题

  • 由于调用CreateProcess时,程序和参数中都有可能出现空格和特殊字符比如"&^="

    那么我调用了CreateProcess是就想把程序和参数都用双引号括起来。
    如下:

    CreateProcess(
     "c:\\test\\test.bat",
     "\"c:\\test\\test.bat\" \"a1\""
     NULL,
     NULL,
     FALSE,
     CREATE_NEW_CONSOLE,
     NULL,
            NULL,
     &start_info,
     &proc_info);

    但是GetExitCodeProcess返回值是1
    程序出错了。

    如果我只把程序或者参数用双引号括起来
    比如:
    "\"c:\\test\\test.bat\" a1"
    或者
    "c:\\test\\test.bat \"a1\""
    都可以

    如果我想让两个都能处理空格或者特殊字符我应该怎么办?
    谢谢


    Langrisser

    2017年5月12日 6:01

答案

  • Hi Langrisser,

    感谢在MSDN论坛发帖。

    >>由于调用CreateProcess时,程序和参数中都有可能出现空格和特殊字符比如"&^="

    那么我调用了CreateProcess是就想把程序和参数都用双引号括起来。

    如果我想让两个都能处理空格或者特殊字符我应该怎么办?

    对于这种情况,你可以使用一个字符串变量来当作参数传入CreateProcess。例如:

    LPTSTR szCmdline = _tcsdup(TEXT("c:\\test\\test.bat a1"));
    CreateProcess(NULL, szCmdline, /* ... */);

    如果你的文件或者命令行包含空格,必须使用引号来标识在哪里结束。

    详细内容可以参考以下文档。

    https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

    希望对你有所帮助。

    Best Regards,
    Sera Yu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 Langrisser 2017年5月12日 8:27
    2017年5月12日 8:07

全部回复

  • Hi Langrisser,

    感谢在MSDN论坛发帖。

    >>由于调用CreateProcess时,程序和参数中都有可能出现空格和特殊字符比如"&^="

    那么我调用了CreateProcess是就想把程序和参数都用双引号括起来。

    如果我想让两个都能处理空格或者特殊字符我应该怎么办?

    对于这种情况,你可以使用一个字符串变量来当作参数传入CreateProcess。例如:

    LPTSTR szCmdline = _tcsdup(TEXT("c:\\test\\test.bat a1"));
    CreateProcess(NULL, szCmdline, /* ... */);

    如果你的文件或者命令行包含空格,必须使用引号来标识在哪里结束。

    详细内容可以参考以下文档。

    https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

    希望对你有所帮助。

    Best Regards,
    Sera Yu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 Langrisser 2017年5月12日 8:27
    2017年5月12日 8:07
  • 的确好用,十分感谢。

    Langrisser

    2017年5月12日 9:10