2013-04-03 49 views
0

我想要下載一個msi並安裝它,所有這些都在腳本中靜靜地進行。我想嘗試類似start iexplore.exe http://domain.com/file.msi /qn但不幸的是,它只會下載MSI而不開始安裝。 有人知道如何解決這個問題嗎?在腳本下載後安裝?

回答

0

在這裏,你去。我還沒有測試過它,但我至少已經從另一個項目中獲得了JScript函數。用.bat擴展名保存該文件,根據需要修改set url=行,然後運行它。

@if (@[email protected]) @end /* 

:: batch portion 

@echo off 
setlocal 

set url=http://domain.com/file.msi 
set saveloc=%temp%\file.msi 

cscript /nologo /e:jscript "%~f0" "%url%" "%saveloc%" 

msiexec /i "%saveloc%" /qn /norestart 

:installwait 
ping -n 2 0.0.0.0 >NUL 
wmic process where name="msiexec.exe" get name 2>NUL | find /i "msiexec" >NUL && goto installwait 

del "%saveloc%" 

goto :EOF 

:: JScript portion */ 

function fetch(url) { 
    var xObj = new ActiveXObject("Microsoft.XMLHTTP"); 
    xObj.open("GET",url,true); 
    xObj.setRequestHeader('User-Agent','XMLHTTP/1.0'); 
    xObj.send(''); 
    while (xObj.readyState != 4) WSH.Sleep(50); 
    return(xObj); 
} 

function save(xObj, file) { 
    var stream = new ActiveXObject("ADODB.Stream"); 
    with (stream) { 
     type = 1; 
     open(); 
     write(xObj.responseBody); 
     saveToFile(file, 2); 
     close(); 
    } 
} 

save(fetch(WSH.Arguments(0)), WSH.Arguments(1)); 
+0

感謝您的腳本。它返回這個響應:'H:\ My Documents \ Kbox.bat(39,9)ADODB.Stream:參數的類型錯誤, 超出可接受的範圍,或者相互衝突。 – RaptorPete

+0

@RaptorPete - 除非您告訴我您嘗試下載的MSI文件的URL,否則我認爲我無法解決問題。 – rojo

0

您還必須「啓動」下載的文件。它將下載到默認的下載位置(在Windows 7中爲C:\ Users [用戶名] \下載,除非它已被更改)。但是,您必須等待文件等待下載完成,否則將無法運行msi。據我所知,沒有辦法讓它檢查你,所以你只需要花幾秒鐘時間來計算最長的預期下載時間。等待可以通過幾種不同的方式完成,具體取決於您正在使用的操作系統。一個例子是

timeout /t [seconds] /nobreak > NUL 

此接受秒的等待時間,且/ NOBREAK意味着它忽略按鍵(其通常將指示繼續進行定時器完成之前)。另一種方法是讓批處理文件ping一個無效的IP地址(1.1.1.1)達一定的毫秒數。例如

PING 1.1.1.1 -n 1 -w [milliseconds] >NUL 

希望這會有所幫助。