2013-03-12 3 views
6

Я работаю над вызовом файла .exe с активным WScript.shell activeX. Файл wkhtmltopdf.exe и используется для преобразования HTML-страницы в .pdf. Все работает хорошо, когда я просто вызываю C: \ wkhtmltopdf.exe в коде. Он запускается и затем закрывается правильно. Но моя проблема заключается в том, что вам нужно запустить его из cmd с именем программы, а затем с именем HTML-файла, за которым следует имя .pdf, которое вы хотите создать.Использование активного скрипта WScript.shell для выполнения командной строки

Например:

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.exe. Путь заполнения:

C:\Program Files (x86)\wkhtmltopdf\wkhtmltopdf.exe 

Я действительно работаю только с UNIX, поэтому я не уверен в пробелах на пути. Я могу сделать chdir с пробелами, но я не могу использовать путь заполнения при его выполнении. Любая информация будет полезна. Заранее спасибо.

+0

Почему вы не сделать простой CGI, который делает это, и избежать ACTIVEX что IE только и разрешения кошмар? – epascarello

+0

Это нужно запустить в интрасети, а IE всегда является браузером по умолчанию. – JoBaxter

ответ

9

Согласно следующему:

http://msdn.microsoft.com/en-us/library/d5fk67ky%28v=vs.84%29.aspx

Вы должны быть в состоянии передать команды непосредственно в составе strCommand пар, вы, вероятно, будете лучше, чтобы избавиться от лишних кавычек Обертывания цельного команда и аргументы:

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"'); 
+0

Да, вам нужно избегать обратной косой черты. –

3

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

Я тоже хотел запустить команду, используя 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"');