【问题标题】:Access hangs on WScript.Shell.runAccess 在 WScript.Shell.run 上挂起
【发布时间】: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


【解决方案1】:

那么这就是你的解决方案。

如果被调用的程序没有完成,Access(或者更确切地说是 Shell.Run)会等待它。等等。

您可以尝试为 intWindowStyle 传递 1 而不是 0 以显示程序窗口。也许它显示了一个错误。

这部分命令行看起来很奇怪:

test RD#"F:\AA\Bicom 5\SimplyTax\Response\STResponse.txt"

RD# 真的应该是这个样子吗?

【讨论】:

  • 啊,是的,RD# 是程序的可选参数。应该是这样的。
【解决方案2】:

很遗憾,我没有找到解决这个问题的方法。看起来有问题的程序无法处理带有空格的文件路径......

我只是在我的应用程序中添加了一个新字段,它需要一个没有空格的文件路径,并告诉他们将程序复制到该路径。现在它可以正常工作了。

感谢您的回复和帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    • 2012-06-12
    相关资源
    最近更新 更多