2016-03-14 88 views
-2

CreateProcess有3個字符串參數:lpApplicationNamelpCommandLine,lpCurrentDirectoryWinAPI CreateProcess和參數引用

我試圖引用該參數,發現有時引號會打破我的代碼。 有人可以解釋引用規則嗎?

正常工作:

NULL 
"\"C:\\some path\\my app.exe\" myparam1 myparam2" 
"C:\\some path" 

不起作用:

NULL 
"\"C:\\some path\\my app.exe\" myparam1 myparam2" 
"\"C:\\some path\"" 

正常工作:

"C:\\some path\\my app.exe" 
"\"C:\\some path\\my app.exe\" myparam1 myparam2" 
"C:\\some path" 

不起作用:

"\"C:\\some path\\my app.exe\"" 
"\"C:\\some path\\my app.exe\" myparam1 myparam2" 
"C:\\some path" 

P.S.對不起,StackOverflow的格式沒有在上面的例子中顯示我的反斜槓,我錯過了它...現在修復了

+3

請記住,C字符串中的所有*反斜槓必須被轉義;你所有的C字符串都需要使用兩個反斜槓作爲路徑分隔符。引用參數的規則在「The New New Thing」博客的'CommandLineToArgvW()'函數的文檔中以及各個位置中描述。 – andlabs

+2

不應引用應用程序路徑和當前目錄。引用是用於命令行的,不適用於路徑和目錄。 –

+0

@RaymondChen但是,如果你看看CreateProcess的文檔,你會看到lpApplicationName必須被引用。損壞的文檔? –

回答

2

行情屬於lpCommandLine說法。 lpApplicationNamelpCurrentDirectory都指定了文件名,因此不能包含嵌入的引號。

0

首先,正如已經被andlabs強調的那樣,在C中,任何反斜槓都必須用反斜槓轉義。
表示MS用於解釋命令行參數的規則有點複雜和棘手。
他們在這裏解釋:https://msdn.microsoft.com/en-us/library/a1y7w461.aspx
我甚至不嘗試添加一個額外的字......

+0

感謝提示。但命令行的引用正常工作。什麼不起作用 - 引用lpApplicationName和lpCurrentDirectory –

+0

在這種情況下,C字符串轉義的一般規則是有效的。 –

+0

因其他參數逃脫 –