2011-06-21 124 views
1

我試圖調用CreateProcess函數,並且遇到包含空格的應用程序的路徑名稱問題。文檔here指示我'使用帶引號的字符串'來指定一個路徑,如X:\My Directory\Myexe.exe,但對如何做到這一點保持沉默,這是一種恥辱,因爲我還沒有管理它。如何分隔在VB6中包含空格的路徑名?

"""X:\My Directory\Myexe.exe""" 

得到錯誤123(語法不正確的),並且

"X:\""My Directory""\Myexe.exe" 

得到錯誤3(路徑未找到)。

有誰知道如何做到這一點?

編輯如問,更多的代碼。我使用這個,在exe路徑名稱上進行了各種嘗試。這實際上不起作用,但由於其他原因而失敗(尚未被發現)。

Dim our_process_information As PROCESS_INFORMATION 
Dim process_attributes As SECURITY_ATTRIBUTES 
Dim thread_attributes As SECURITY_ATTRIBUTES 

create_result = CreateProcess("X:\Myexe.exe", _ 
           vbNull, _ 
           process_attributes, _ 
           thread_attributes, _ 
           0, _ 
           0, _ 
           0, _ 
           "X:\", _ 
           startup_information, _ 
           our_process_information) 
+0

你的第一個例子看起來對我很正確。請注意,您只需使用雙引號將路徑包裝,而不是整個命令行(如果您還傳遞參數)。如果你可以發佈更多的代碼,它可能會有所幫助:) – mdm

+0

@mdm,增加了一些。不管怎麼說,還是要謝謝你。 –

回答

1

這可能由於您將應用程序名稱傳遞給命令行,因此失敗。文檔將它們描述爲或多或少互換(除了可以將命令行參數放在第二個參數中)。第二個參數是在命令行,所以你可以做這樣的事情:

create_result = CreateProcess(vbNullString, _ 
           Chr(34) & "X:\Myexe.exe" & Chr(34), _ 
           process_attributes, _ 
           thread_attributes, _ 
           0, _ 
           0, _ 
           0, _ 
           "X:\", _ 
           startup_information, _ 
           our_process_information) 

包住命令行的報價,並把它傳遞給函數調用的命令行參數。過去我以這種方式取得了成功。

編輯 Fairly nice example here

+0

謝謝@mdm。這似乎已經做到了。 –

1

這已經有一段時間,因爲我用VB6,但我想我使用的語法是:

Chr(34) & "X:\My Directory\Myexe.exe" & Chr(34) 

所以,你的一小段代碼片段將成爲:

create_result = CreateProcess(Chr(34) & "X:\My Directory\Myexe.exe" & Chr(34), _ 
           vbNull, _ 
           process_attributes, _ 
           thread_attributes, _ 
           0, _ 
           0, _ 
           0, _ 
           "X:\", _ 
           startup_information, _ 
           our_process_information) 
+0

感謝您的建議,但當我嘗試此操作時,仍然收到錯誤123。 –

相關問題