Использование WScript.Shell activeX для выполнения командной строки
Я работаю на вызов .exe-файл с WScript.оболочки элементов ActiveX. Файл wkhtmltopdf.exe, и он используется для преобразования HTML-страницы в a .документ pdf. Все работает хорошо, когда я просто звоню. C:wkhtmltopdf - ... exe в код. Он запускается, а затем правильно закрывается. Но моя проблема в том, что вам нужно запустить его из cmd с именем программы, а затем имя файла HTML, которое Вы читаете, а затем.имя pdf вы хотите, чтобы он был создан как.
например:
c:wkhtmltopdf.exe c:PDFTestPage.html c:TEST.pdf
этот будем называть wkhtmltopdf.exe, читать c:PDFTestPage - ... html, затем создать c:TEST - ... документ pdf. Отлично работает, когда я набираю его в cmd.
кто-нибудь знает activeX, который не будет просто работать и .exe, но на самом деле выполнить командную строку?
вот мой код, который я сейчас использую.
function callShellApplication(){
var objShell = new ActiveXObject("WScript.shell");
objShell.run('"c:wkhtmltopdf.exe"');
}
очень хотелось бы, чтобы это было в следующем.
function callShellApplication(){
var objShell = new ActiveXObject("WScript.shell");
objShell.run('"c:wkhtmltopdf.exe c:PDFTestPage.html c:TEST.pdf"');
}
Также замечу. По какой-то причине я не могу запустить .exe из абсолютного пути. Мне нужно перейти в каталог а затем просто введите wkhtmltopdf.исполняемый. Путь заполнения:
C:Program Files (x86)wkhtmltopdfwkhtmltopdf.exe
Я действительно работаю только с UNIX, поэтому я не уверен в пробелах в пути. Я могу сделать chdir с пробелами, но я не могу использовать путь заполнения при его выполнении. Любая информация была бы полезной. Заранее спасибо.
2 ответов
согласно следующему:
http://msdn.microsoft.com/en-us/library/d5fk67ky%28v=vs.84%29.aspx
вы должны иметь возможность передавать команды непосредственно как часть strCommand
param, вам, вероятно, лучше избавиться от дополнительных кавычек, обертывающих всю команду и аргументы:
function callShellApplication(){
var objShell = new ActiveXObject("WScript.shell");
objShell.run('c:\wkhtmltopdf.exe c:\PDFTestPage.html c:\TEST.pdf');
}
также вы должны иметь возможность обрабатывать пробелы в путях, оборачивая каждый элемент в кавычки, например:
function callShellApplication(){
var objShell = new ActiveXObject("WScript.shell");
objShell.run('"C:\Program Files (x86)\wkhtmltopdf\wkhtmltopdf.exe" "c:\PDFTestPage.html" "c:\TEST.pdf"');
}
вы должны также имейте в виду, хотите ли вы bWaitOnReturn
или нет, и что intWindowStyle
вам нужно (некоторые исполняемые файлы могут извлечь выгоду из определенного стиля).
также просто в качестве предостережения - прошло некоторое время с тех пор, как я использовал WScript.shell
- но вам может потребоваться избежать ваших обратных косых черт на ваших путях. Таким образом, путь может выглядеть следующим образом:
objShell.run('"C:\Program Files (x86)\wkhtmltopdf\wkhtmltopdf.exe"');
для всех, кто сталкивается с этой проблемой, у меня была аналогичная (но немного другая) проблема, которую я думал, что поделюсь.
Я тоже хотел запустить команду с помощью ActiveXObject("WScript.shell
. Мне нужно было запустить .bat
скрипт, который запустит Google Chrome на определенный URL.
JS, который у меня был, был следующим:
var objShell = new ActiveXObject("WScript.shell");
objShell.run('"C:\Scripts\MyChromeBat.bat" MY_URL');
это будет правильно запустить мой .bat
скрипт, который был очень простой:
start "" chrome.exe %1
этот вопрос я наткнулся на это MY_URL
содержал некоторые параметры запроса, и когда я использовал выше JS, параметры запроса были бы удалены до степени. Поэтому, когда я пытался открыть
http://localhost:8080/webapp/mypage.html?param1=test¶m2=test2
он действительно откроется
http://localhost:8080/webapp/mypage.html?param1
исправление оказалось простым - я должен был окружить MY_URL
в кавычках. Поэтому я изменил строку
objShell.run('"C:\Scripts\MyChromeBat.bat" MY_URL');
на
objShell.run('"C:\Scripts\MyChromeBat.bat" "MY_URL"');