Scripting 在脚本中下载后安装?

Scripting 在脚本中下载后安装?,scripting,vbscript,batch-file,windows-installer,Scripting,Vbscript,Batch File,Windows Installer,我想下载一个msi并安装它,所有这些都在一个脚本中静默进行。我想尝试类似于启动iexplore.exe的东西http://domain.com/file.msi /qn但不幸的是,它只会下载MSI,而不会开始安装。 有人知道怎么解决这个问题吗?给你。我还没有测试它,但至少我已经从另一个项目中制作了JScript函数。使用.bat扩展名保存此文件,根据需要修改设置url=行,然后运行它 @if (@a==@b) @end /* :: batch portion @echo off setloc

我想下载一个msi并安装它,所有这些都在一个脚本中静默进行。我想尝试类似于启动iexplore.exe的东西http://domain.com/file.msi /qn但不幸的是,它只会下载MSI,而不会开始安装。
有人知道怎么解决这个问题吗?

给你。我还没有测试它,但至少我已经从另一个项目中制作了JScript函数。使用
.bat
扩展名保存此文件,根据需要修改
设置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));

您还必须“启动”下载的文件。它将下载到默认的下载位置(C:\Users[username]\Downloads在Windows 7中,除非已更改)。但是,您必须让文件等待下载完成,否则它将无法运行msi。据我所知,没有一种内置的方法可以让它为您检查,所以您只需考虑最长的预期下载时间,以秒为单位。等待可以通过几种不同的方式完成,具体取决于您使用的操作系统。一个例子是

timeout /t [seconds] /nobreak > NUL
它接受以秒为单位的等待时间,/nobreak表示它忽略按键(通常在计时器完成之前指示继续)。另一种方法是让批处理文件ping无效IP地址(1.1.1.1)若干毫秒。比如说

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

希望这有帮助。

谢谢你的剧本。它返回以下响应:“H:\My Documents\Kbox.bat(39,9)ADODB.Stream:参数类型错误,超出了可接受的范围,或者彼此冲突。”@RaptorPete-除非您告诉我您尝试下载的MSI文件的URL,否则我想我无法进行故障排除。