2015-12-10 2 views
0

Я использую WScript.Shell для запуска стороннего исполняемого файла, который читает файл и отправляет некоторые данные.Access зависает на WScript.Shell.run

Dim objShell As Object, Shellerror As Long 
Set objShell = CreateObject("WScript.Shell") 

Проблема заключается в том, что доступ висит на .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) 

Теперь проблема здесь в том, что исполнение просто висит на этой линии, без каких-либо ошибок или что-нибудь, пока я с силой закрыть доступ (она идет в не отвечает состояние).

Я исследовал эту проблему в течение двух дней, и единственное, что я мог понять, это то, что она зависает только тогда, когда у вас есть пробелы в пути к файлам. Я не могу просто удалить пробелы с пути, потому что мы делаем это для нескольких разных компаний, которые имеют разные структуры папок (некоторые из них имеют пробелы, а некоторые без них).

Насколько я вижу, компании, использующие пути без пробелов, не имеют проблем.

Я пробовал несколько вещей с путями, ни один из них, похоже, не работает. Я помещал вокруг них двойные кавычки, я размещал одинарные кавычки вокруг них, я удалил все кавычки, я попытался использовать функцию ShellExecute, которая дала те же результаты, но просто сделала Access не быстрее реагировать.

Я чувствую, что нахожусь здесь на стене ... Что я делаю неправильно?

+0

У вас есть последний параметр 'bWaitOnReturn'' Shell.Run', установленный в 'True'. Это намеренно? Если да, то это необходимо? Доступ не зависает, он ждет завершения вызова вызываемой программы. [Shell.Run] (https://msdn.microsoft.com/en-us/library/d5fk67ky%28v=vs.84%29.aspx) doc. – Andre

+0

К сожалению, требуется BWaitOnReturn. Я вызываю программу, которая пишет мне файл .txt, который затем читаю. Я прочитал его сразу после вызова программы, поэтому waitOnReturn был преднамеренным. – Miha

+0

Хорошо. Вы проверяли, например. с Process Explorer, что вызванная программа 'simpletax.exe' фактически заканчивается? – Andre

ответ

0

Ну, к сожалению, мне не повезло найти решение этой проблемы. Похоже, что рассматриваемая программа просто не может обрабатывать пути к файлам с пробелами ...

Я просто добавил новое поле в своем приложении, которое ожидает путь к файлу без пробелов и попросит их скопировать программу на этот путь , Теперь он работает без проблем.

Благодарим за ответы и помощь.

0

Хорошо, тогда это ваше решение.

Если вызываемая программа не завершена, Access (или, скорее, Shell.Run) будет ждать ее. И ждать.

Вы можете попробовать проехать 1 вместо 0 для intWindowStyle, чтобы показать окно программы. Возможно, это показывает ошибку.

Кроме того, эта часть вашей командной строки выглядит странно:

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

ли RD# действительно должен выглядеть?

+0

Ах да, что RD # является необязательным параметром для программы. Это должно быть так. – Miha

Смежные вопросы