在脚本中下载后安装?

时间:2013-04-03 17:21:13

标签: scripting vbscript batch-file windows-installer

我想下载一个msi并安装它,所有这些都是在脚本中默默地进行的。我想尝试start iexplore.exe http://domain.com/file.msi /qn但不幸的是,它只会下载MSI而不是开始安装。 有谁知道如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

你走了。我还没有测试过,但至少我已经从另一个项目中获得了JScript函数。使用.bat扩展名保存此广告,根据需要修改set url=行,然后运行它。

@if (@a==@b) @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));

答案 1 :(得分: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

希望这有帮助。