0

msi をダウンロードしてインストールしたいと思います。すべてスクリプト内でサイレント モードで行います。start iexplore.exe http://domain.com/file.msi /qn残念ながら、MSIをダウンロードするだけで、インストールは開始されません。これを修正する方法を知っている人はいますか?

4

2 に答える 2

0

また、ダウンロードしたファイルを「開始」する必要があります。デフォルトのダウンロード場所 (変更されていない限り、Windows 7 では C:\Users[ユーザー名]\Downloads) にダウンロードされます。ただし、ダウンロードが完了するまでファイルを待機させる必要があります。そうしないと、msi を実行できなくなります。私の知る限り、チェックする方法が組み込まれていないため、予想される最長のダウンロード時間を秒単位で考慮する必要があります。待機は、使用している OS に応じて、いくつかの異なる方法で行うことができます。一例は

timeout /t [seconds] /nobreak > NUL

これは秒単位の待機時間を受け入れ、/nobreak はキー押下を無視することを意味します (これは通常、タイマーが終了する前に続行することを示します)。もう 1 つの方法は、バッチ ファイルが無効な IP アドレス (1.1.1.1) に対して特定のミリ秒で ping を実行するようにすることです。例えば

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 に答える