2010-07-30 74 views
1

我對第一個2個參數,模塊和命令行感到困惑。我發現,除非我填充它不能正常工作,而且看起來文檔中另有說明。對Win32的困惑CreateProcess

我想打電話給「testApp.exe參數1 = 123」

我發現的唯一方式的工作原理是:

CreateProcess("testApp.exe","testApp.exe param1=123",... 

我認爲無論這些應該工作,但至今沒有運氣:

CreateProcess("testApp.exe","param1=123",... 
CreateProcess(NULL,"testApp.exe param1=123",... 

我讀過msdn文檔幾次,所以我錯過了什麼?

+0

這是你的*確切*代碼與確切的命令行? (順便說一下,請注意,命令行不能是字符串文字;參數必須是非''contst'字符串。) – jamesdlin 2010-07-30 08:42:42

+0

'此函數的Unicode版本CreateProcessW可以修改此字符串的內容。因此,該參數不能是指向只讀內存的指針(例如const變量或文字字符串)。如果此參數是一個常量字符串,則該函數可能會導致訪問衝突。' – 2010-07-30 08:45:16

+0

您認爲您安全是因爲您沒有使用Unicode版本嗎?這仍然不是一個好主意。 (這是作爲一般建議,而不是作爲你的問題的答案。) – jamesdlin 2010-07-30 09:33:20

回答

2

第一個參數是要運行的可執行文件的名稱。第二個參數是命令行。命令行不需要包含可執行文件的名字,如果沒有然而,你通過像

"param1 param2" 

然後在你的程序,argv[0] == "param1"argv[1] == "param2"。因此,您通常必須將可執行文件的名稱作爲第一個值來滿足程序的要求,而不是Windows'。

如果您未傳遞可執行文件名稱,則會從命令行字符串中的第一個值中提取它。

+0

被調用的進程是一個C#應用程序,其中包含'static int Main(string [] args)',其中的可執行文件名是_not_不包括在內。這是問題嗎? – 2010-07-30 08:26:02

+0

@John,命令行總是以單個字符串的形式傳遞給進程(完全是作爲第二個參數傳遞給'CreateProcess'的字符串),這取決於進程的運行時解析它。 C#是否忽略該字符串中的第一個標記是無關緊要的。 – avakar 2010-07-30 11:23:15

0

而不是給可執行文件的名稱嘗試給與可執行文件的名稱的完整路徑。

1

我討論了使CreateProcess在文章here中運行exes的問題。有很多事情可能會出錯,包括對完全限定路徑的要求,以及命令行中缺少exe名稱。