我想下载一个 msi 并安装它,所有这些都在一个脚本中静默进行。我想尝试类似start iexplore.exe http://domain.com/file.msi /qn
但不幸的是,它只会下载 MSI 而不会开始安装。有人知道如何解决这个问题吗?
问问题
94 次
2 回答
0
您还必须“启动”下载的文件。它将下载到默认下载位置(Windows 7 中的 C:\Users[username]\Downloads,除非它已被更改)。但是,您必须让文件等待下载完成,否则将无法运行 msi。据我所知,没有内置的方法可以让它检查你,所以你只需要考虑最长的预期下载时间,以秒为单位。等待可以通过几种不同的方式完成,具体取决于您使用的操作系统。一个例子是
timeout /t [seconds] /nobreak > NUL
这接受以秒为单位的等待时间,并且 /nobreak 意味着它忽略按键(这通常表示在计时器完成之前继续。)。另一种方法是让批处理文件 ping 一个无效的 IP 地址 (1.1.1.1) 一定的毫秒数。例如
PING 1.1.1.1 -n 1 -w [milliseconds] >NUL
希望这可以帮助。
于 2013-04-03T17:59:12.143 回答
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));
于 2013-04-03T17:51:03.880 回答