2013-03-12 12 views
6

Bir WScript.shell activeX ile bir .exe dosyasını çağırmak için çalışıyorum. Dosya wkhtmltopdf.exe dosyasıdır ve bir HTML sayfasını bir .pdf dosyasına dönüştürmek için kullanılır. Kodda C: \ wkhtmltopdf.exe'yi çağırdığımda her şey iyi çalışıyor. Çalışıyor ve düzgün bir şekilde kapanıyor. Ancak benim sorunum, program adı ile cmd'den çalıştırmanız ve sonra okuduğunuz HTML dosyası adı ile oluşturulmasını istediğiniz .pdf adı ile çalıştırmanız gerekiyor. ÖrneğinBir komut satırı yürütmek için bir WScript.shell activeX kullanma

:

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

Bu arayacak wkhtmltopdf.exe, c okuyun: \ PDFTestPage.html, ardından c oluşturun: \ test.pdf. Bunu cmd'ye yazdığımda iyi çalışıyor.

Sadece ActiveX ve .exe değil, bir komut satırı yürütecek ActiveX biliyor mu?

Şu anda kullandığım kodlarım.

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

Aşağıdakilerden olmasını ister misiniz? Aynı zamanda yan not. Bazı nedenlerden dolayı .exe'yi mutlak bir yoldan başlatamıyorum. Dizine taşınmalı ve sadece wkhtmltopdf.exe yazmalıyım. Doldurma yolu:

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

Gerçekten yalnızca UNIX ile çalışıyorum, bu nedenle yoldaki boşluklardan emin değilim. Boşluklarla bir chdir yapabilirim, ancak bunu yürütürken dolgu yolunu kullanamıyorum. Herhangi bir bilgi yardımcı olabilir. Şimdiden teşekkür ederim. Aşağıdaki göre

+0

Neden öyle basit bir cgi yapmak ve IE sadece ve izinler kabus olan ActiveX'i kaçınmak gerekmez olmak hattı

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

modifiye? – epascarello

+0

Bunun bir intranet üzerinde çalışması gerekir ve IE her zaman varsayılan tarayıcıdır. – JoBaxter

cevap

9

:

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

Sen, muhtemelen bütününü sarma ekstra tırnak kurtulmak daha iyi olurdu strCommand param parçası olarak doğrudan komutları geçmesi gerekir komuta ve argümanlar: Ayrıca

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

bunu gibi tırnak içinde her öğeyi sararak yolları boşluk kullanacak mümkün olmalıdır:

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

Ayrıca bWaitOnReturn ya da değil, ve hangi intWindowStyle (bazı yürütülebilir belirli bir tarzda yararlanabilir) ihtiyaç isteyip akılda tutmak gerekir. Ben WScript.shell — kullandım ancak yollarında da ters eğik çizgi kaçış gerekebilir çünkü

Ayrıca sadece uyarıcı bir not — gibi bir süre oldu. Yani bir yol aşağıdaki gibi görünecektir gerekebilir:

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

Evet, ters eğik çizgi kaçmak gerekir. –

3

bu konuda rastlar herkesten için ben paylaşmak istedim benzer (ama biraz farklı) sorunu vardı.

Ben de ActiveXObject("WScript.shell kullanarak bir komut çalıştırmak istedim. Google Chrome'u belirli bir URL'ye başlatan bir .bat komut dosyasını çalıştırmam gerekiyordu.

start "" chrome.exe %1 

ben rastladım MY_URL bazı sorgu parametrelerini içerdiğini oldu sorunu:

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

Bu düzgün çok basitti benim .bat senaryoyu başlatacaklarını şu şekildedir: Ben

JS oldu ve yukarıdaki JS'yi kullandığımda, sorgu paramları bir ölçüde sıyrılacaktı. Bu yüzden

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

açmaya çalıştığı sırada it would düzeltme basit olduğu ortaya çıktı

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

aslında açık - Ben tırnak içinde MY_URL çevreleyen zorunda kaldı. Bu yüzden

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