【发布时间】:2015-12-10 12:09:46
【问题描述】:
我正在使用WScript.Shell 运行第三方可执行文件,该可执行文件读取文件并发送一些数据。
Dim objShell As Object, Shellerror As Long
Set objShell = CreateObject("WScript.Shell")
问题是,Access 在.run 语句上挂起。
Shellerror = objShell.Run(Chr(34) & PreveriPath(ApplicationPath) & "SimplyTax\simplytax.exe" & Chr(34) & "" & VrstaZahteve & " " & Delovanje & " " & SWid & " " & Chr(34) & Datoteka & Chr(34) & " " & Geslo & " RD#" & Chr(34) & ResponseDatoteka & Chr(34), 0, True)
你可能看不到任何东西,这里是实际运行的字符串。
Shellerror = objShell.Run("F:\AA\Bicom 5\SimplyTax\simplytax.exe" racun test 10456317 "F:\AA\Bicom 5\SimplyTax\racun.txt" test RD#"F:\AA\Bicom 5\SimplyTax\Response\STResponse.txt", 0, True)
现在的问题是,执行只是挂在这一行上,没有任何错误或任何东西,直到我强制关闭 Access(它进入无响应状态)。
我已经研究这个问题两天了,我唯一能弄清楚的是,它只有在文件路径中有空白时才会挂起。我不能只删除路径中的空白,因为我们正在为一些不同的公司执行此操作,这些公司具有不同的文件夹结构(有些有空格,有些没有)。
据我所知,使用不带空格的路径的公司没有任何问题。
我在路径上尝试了一些东西,但它们似乎都不起作用。我在它们周围加上了双引号,在它们周围加上了单引号,我删除了所有的引号,我尝试使用产生相同结果的ShellExecute 函数,它只是让 Access 没有更快地响应。
我觉得我在这里碰壁了……我做错了什么?
【问题讨论】:
-
您将
Shell.Run的最后一个参数bWaitOnReturn设置为True。这是故意的吗?如果是,有必要吗? Access 不会挂起,它会等待被调用的程序完成。 Shell.Run 文档。 -
遗憾的是需要 bWaitOnReturn。我正在调用一个程序,它会向我写入一个 .txt 文件,然后我会读取该文件。我是在调用程序后立即阅读的,所以 waitOnReturn 是故意的。
-
好的。你检查过吗?使用 Process Explorer,被调用程序
simplytax.exe实际完成了吗? -
不,它保留在进程选项卡中。而且我认为,错误实际上可能出在程序 simpletax 中,但如果我的文件路径中没有任何空白(我已经向该程序的开发人员发送了一封邮件,但是我仍在等待回复)。
标签: vba ms-access shellexecute wsh