3

InstallShield 2013 を使用して、 Windows プラットフォーム更新 KB2670838を必要とするアプリケーション用の基本 MSI インストーラーを作成しています。

.NET フレームワークやその他の要件については、InstallShield の再配布可能セクションで選択します。KB2670838 は利用できません。

Microsoft から KB2670838 をダウンロードすると、.msuファイルが取得されます。必要に応じて自動的にインストールされるように、何らかの形でインストーラーに含めることはできますか? そうでない場合、インストールを停止して、「KB2670838 が必要ですが、インストールされていません。ここから入手してください...」とユーザーに伝える方法はありますか?

4

5 に答える 5

3

InstallShield では、通常、この種の更新を前提条件 ([ツール] > [前提条件エディター]) として、またはスイートに含まれるパッケージ (ファイル[SystemFolder]wusa.exeをインストールするための参照) として配布する必要があります。.msuどちらの場合も、これにより、再配布可能なインストールがパッケージのインストールから論理的に分離され、ユーザーには単一のインストーラー エクスペリエンスが提供されます。

Glytzhkof は、更新プログラムがインストールされているかどうかを判断する方法について、非常に優れた点をいくつか挙げています。これらを (前提条件またはスイート パッケージの) 条件に組み込み、パッケージ内の更新またはその欠如を検出して.msi、必要な更新が の起動時までにインストールされていない場合に中止できるようにする必要があり.msiます。

于 2014-03-14T12:41:55.633 に答える
1

私の他の回答は、現時点では控えめに言っても少し有機的であるため、参照スタイルの回答を追加してみます.MSIの議論が含まれているため、そのままにしておきます。以下の中央セクションにある MSI の推奨事項を参照してください

WMI :

wmic qfe where "HotfixID = 'KB973687'"

PowerShell : (完全なリストについては get-hotfix のみ)

get-hotfix | findstr "981889"

SystemInfo (リスト形式の引数を削除):

systeminfo /fo csv

PSInfo (すべてのマシンのすべてを一覧表示するわけではないようで、サイレント モードで適切に実行されない可能性があります):

PSinfo -h

レジストリ(ホットフィックスの完全なリストではないようです):

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

MSI custom action useの場合、他の回答で説明されているように、ファイルのバージョンを検査するカスタム アクションを実際に使用します。非常に信頼性が高く、ファイルがまだ最新である間にホットフィックスが廃止される可能性があることを考慮に入れています。


参考文献

于 2014-03-14T16:54:56.240 に答える
0

同じ問題があり、PowerShell スクリプトの前提条件とそれを実行するバッチ ファイルを追加することで解決しました。

pre.ps1ファイルは次のようになります。

function TestConnection
{
    Test-Connection -ComputerName "8.8.8.8" -Quiet
}

get-hotfix -id KB2670838
if(!$?){
    #SourceURI = "https://download.microsoft.com/download/1/4/9/14936FE9-4D16-4019-A093-5E00182609EB/Windows6.1-KB2670838-x64.msu";
    #$FileName = $SourceURI .Split('/')[-1]
    #$BinPath = Join-Path $DownloadPath -ChildPath $FileName
    Invoke-Webrequest -Uri $SourceURI -OutFile $BinPath
    #Start-Process -FilePath $BinPath -ArgumentList "/q /norestart" -Wait -NoNewWindow
}

pre.cmdファイルは次のようになります。

@echo off
::set PS_FILE=%~dp0Prerequisite.ps1
set PS_FILE=%~dpn0.ps1
set PS_EXEC_PATH=%SystemRoot%\sysnative\WindowsPowerShell\v1.0\
set PS_EXEC_PATH=%SystemRoot%\System32\WindowsPowerShell\v1.0\
::set PS_EXEC_PATH=%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\
set PS_EXEC_PATH=
set PS_EXEC=%PS_EXEC_PATH%powershell.exe
echo %PS_EXEC%
echo %PS_FILE%

::%PS_EXEC% -file %PS_FILE% set-executionpolicy remotesigned
::%PS_EXEC% -NoProfile -ExecutionPolicy Bypass -Command "& '%PS_FILE%'"
::This is with admin rights
%PS_EXEC% -NoProfile -Command "& {Start-Process PowerShell.exe -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""%PS_FILE%""' -Verb RunAs}"

::pause
于 2017-02-19T09:08:06.317 に答える