2013-03-12 16 views
6

Ich arbeite am Aufruf einer .exe-Datei mit einer WScript.shell activeX. Die Datei ist wkhtmltopdf.exe und dient zum Konvertieren einer HTML-Seite in eine .pdf-Datei. Alles funktioniert gut, wenn ich nur C: \ wkhtmltopdf.exe im Code anrufe. Es läuft und schließt dann korrekt. Aber mein Problem ist, dass Sie es von cmd mit dem Programmnamen und dem Namen der HTML-Datei, die Sie lesen, gefolgt von dem .pdf-Namen, den Sie erstellen möchten, ausführen müssen.Verwenden einer WScript.shell activeX zum Ausführen einer Befehlszeile

Zum Beispiel:

c:\wkhtmltopdf.exe c:\PDFTestPage.html c:\TEST.pdf 

Diese wkhtmltopdf.exe nennen, lesen Sie c: \ PDFTestPage.html, dann c: \ test.pdf. Funktioniert gut, wenn ich es in cmd eintippe.

Kennt jemand eine activeX, die nicht nur ausführen und .exe aber tatsächlich eine Befehlszeile ausführen?

Hier ist mein Code, den ich derzeit verwende.

function callShellApplication(){ 
var objShell = new ActiveXObject("WScript.shell"); 
objShell.run('"c:\wkhtmltopdf.exe"'); 
} 

Würde es wirklich, das folgende zu sein.

function callShellApplication(){ 
var objShell = new ActiveXObject("WScript.shell"); 
objShell.run('"c:\wkhtmltopdf.exe c:\PDFTestPage.html c:\TEST.pdf"'); 
} 

Auch Randnotiz. Aus irgendeinem Grund kann ich die .exe nicht von einem absoluten Pfad starten. Ich muss in das Verzeichnis wechseln und dann wkhtmltopdf.exe eingeben. Der Füllungspfad ist:

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

ich wirklich nur mit UNIX arbeiten, so bin ich über Leerzeichen im Pfad nicht sicher. Ich kann einen Chdir mit den Leerzeichen machen, aber ich kann den Füllpfad nicht benutzen, wenn ich ihn ausführe. Jede Information wäre hilfreich. Vielen Dank im Voraus.

+0

Warum Sie nicht über eine einfache cgi machen, die es tut und activeX zu vermeiden, die nur IE ist und ein Berechtigungs Alptraum? – epascarello

+0

Dies muss in einem Intranet ausgeführt werden und IE ist immer der Standardbrowser. – JoBaxter

Antwort

9

Gemäß dem folgenden:

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

Sie sollten die Befehle direkt als Teil des strCommand param passieren können, würden Sie wahrscheinlich besser dran, der zusätzlichen Anführungszeichen loszuwerden Einwickeln des gesamten Befehl und Argumente:

function callShellApplication(){ 
    var objShell = new ActiveXObject("WScript.shell"); 
    objShell.run('c:\wkhtmltopdf.exe c:\PDFTestPage.html c:\TEST.pdf'); 
} 

auch sollten Sie in der Lage sein, Räume in Pfaden zu behandeln, indem jedes Element in Anführungszeichen Einwickeln, etwa so:

function callShellApplication(){ 
    var objShell = new ActiveXObject("WScript.shell"); 
    objShell.run('"C:\Program Files (x86)\wkhtmltopdf\wkhtmltopdf.exe" "c:\PDFTestPage.html" "c:\TEST.pdf"'); 
} 

Sie sollten auch bedenken, ob Sie bWaitOnReturn oder nicht möchten, und welche intWindowStyle Sie benötigen (einige ausführbare Dateien können von einem bestimmten Stil profitieren).

Auch nur als Vorsichtshinweis — es ist eine Weile her, seit ich WScript.shell — verwendet habe, aber Sie müssen möglicherweise Ihre Backslashes in Ihren Pfaden entkommen. So kann ein Pfad wie folgt aussehen müssen:

objShell.run('"C:\\Program Files (x86)\\wkhtmltopdf\\wkhtmltopdf.exe"'); 
+0

Ja, Sie müssen Backslashes entkommen. –

3

Für alle anderen, die sich über diese Frage kommt, ich hatte ein ähnliches (aber etwas anders) Problem, dass ich dachte, ich würde Aktie.

Ich wollte auch einen Befehl mit der ActiveXObject("WScript.shell ausführen. Ich musste ein .bat Skript ausführen, das Google Chrome auf eine bestimmte URL aufruft.

Die JS ich hatte, war wie folgt:

var objShell = new ActiveXObject("WScript.shell"); 
objShell.run('"C:\\Scripts\\MyChromeBat.bat" MY_URL'); 

Dies würde mein .bat Skript richtig starten, die sehr einfach war:

start "" chrome.exe %1 

Das Thema stieß ich auf war, dass MY_URL einige Abfrage-Parameter enthalten und wenn ich das obige JS verwendete, würden die Abfrageparameter in gewissem Umfang entfernt werden. Also, wenn ich versuchte,

http://localhost:8080/webapp/mypage.html?param1=test&param2=test2 

es zu öffnen würde tatsächlich offen

http://localhost:8080/webapp/mypage.html?param1 

Das Update stellte sich heraus, einfach zu sein - ich hatte MY_URL in Anführungszeichen zu umgeben. So modifizierte ich die Linie

objShell.run('"C:\\Scripts\\MyChromeBat.bat" MY_URL'); 

sein

objShell.run('"C:\\Scripts\\MyChromeBat.bat" "MY_URL"'); 
Verwandte Themen