2011-06-21 80 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。 –

相关问题