Университет, в котором я работаю, позволяет студентам регистрировать свои велосипеды для хранения в помещении зимой. Это делается через веб-сайт. В конце процесса принтер этикеток DYMO, подключенный к сети, должен распечатать этикетку, которая будет приклеена к велосипеду.
Вот как выглядит процесс:
Теперь VBScript работает правильно. Если я вручную запустил VBScript, он откроет Word, загрузит данные CSV, напечатает этикетку и закроет Word.
Аналогичным образом, если я добавлю немного кода в конец VBScript для записи файла .txt (для целей тестирования), текстовый файл будет записан независимо от того, запускаю ли я скрипт вручную или разрешаю его запускать на веб-сайте.
Таким образом, я подозреваю, что существует проблема с разрешениями, препятствующая доступу VBScript к Word и / или принтеру при запуске из Интернета. Есть предложения, как решить эту проблему?
Веб-сервер - это Windows Server 2003 с XAMPP.
Если это поможет, вот строка в PHP, которая вызывает VBScript:
exec('wscript "D:\CSWebHousing\wwwroot\portal2\bikes\testcode.vbs"');
Вот соответствующая часть VBScript:
Sub TestCode
Set ws = WScript.CreateObject("WScript.Shell")
OFFICE_PATH = "C:\path_to\Office12"
file_to_open = CHR(34) & "D:\path_to\Label.doc" & CHR(34)
ws.Run CHR(34)& OFFICE_PATH & "\winword.exe" & CHR(34) & file_to_open, 0, false
'These lines tab and enter past a dialog box
intTime = 3000
Wscript.Sleep(intTime)
ws.Sendkeys "{TAB}"
intTime = 500
Wscript.Sleep(intTime)
ws.Sendkeys "{TAB}"
intTime = 500
Wscript.Sleep(intTime)
ws.Sendkeys "{ENTER}"
intTime = 4000
Wscript.Sleep(intTime)
ws.Sendkeys "%fx"
End Sub
Я думаю, что это проблема с разрешениями, но любые идеи приветствуются.
Спасибо.
Поскольку вы уже предполагали, что это проблема - я думаю, вам следует проверить, являются ли здесь разрешения проблемой.
Если сценарий php запускает сценарий VB, то пользователь, запускающий веб-сервер, запустит сценарий VB. Затем этому пользователю потребуется доступ к расположению сценария и к файлу csv. Самым простым тестом было бы разрешить доступ к обоим файлам всем (который должен быть отменен после успешного тестирования!) - тогда вы узнаете, проблема ли это с разрешением.
Вы также можете протестировать обе части проблемы по отдельности:
Выполнив большое количество сценариев установки с vbscript ...
Думаю, проблема в SendKey.
SendKey отлично подходит, если вы запускаете vbscript как человек. Иногда фокус теряется, когда вы запускаете скрипт как своего рода автоматизированный процесс.
Так получилось, что здесь есть удобный вопрос о переполнении стека о поддержании фокуса вашего окна с помощью SendKey: https://stackoverflow.com/questions/16173315/windows-batch-file-not-working-consistently
Надеюсь, это поможет.