Использование 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&param2=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"');