web-dev-qa-db-ja.com

EXEからMSIを抽出する

EXEセットアップのMSIを抽出して、ネットワーク経由で公開したい。

たとえば、Universal Extractorを使用していますが、Java Runtime Environmentでは機能しません。

51
emdadgar2

7-Zip でうまくいくはずです。

これにより、EXE内のすべてのファイル(したがって、MSIファイル)を抽出できます。

7-Zipで実行できますが、より良い方法は SteinÅsmulで指摘されている管理インストールです

19
Burkhard

InstallShield MSIベースのプロジェクトでは、以下が機能することがわかりました。

setup.exe /s /x /b"C:\FolderInWhichMSIWillBeExtracted" /v"/qn"

このコマンドを実行すると、自由に指定できるディレクトリにMSIが抽出され、製品のアンインストールがサイレントに失敗します。

コマンドラインは、基本的にsetup.exeに製品(/ x)をアンインストールし、サイレントアンインストール(/ s)を試みるように指示します。その間、MSIを特定の場所(/ b)に抽出する必要があります。

/ vコマンドは、Windowsインストーラーに引数(この場合は/ qn引数)を渡します。/qn引数は、インストーラーのGUI出力を無効にします。

92

この質問は主にタグが与えられたInstallShieldに関するものだと推測していますが、WiXベースのパッケージ(およびおそらく他のもの)で同じ問題が発生した場合は、/ extractでインストーラを呼び出してください:

C:\> installer.exe /extract

これにより、インストーラーと一緒にMSIがフォルダーに配置されます。

15
javawizard

パラメーターで始まる:

setup.exe /A

含まれるファイル(MSIを含む)の保存を要求します。

これは、setup.exeを作成したソフトウェアに依存する場合があります。

7
Curt

それを行う唯一の方法は、exeを実行してMSIを収集することです。注意する必要があるのは、MSTを使用してMSIを変換すると、失われる可能性があることです。

このバッチコマンドラインを使用します。

SET TMP=c:\msipath

MD "%TMP%"

SET TEMP=%TMP%

start /d "c:\install" install.exe /L1033

PING 1.1.1.1 -n 1 -w 10000 >NUL

for /R "%TMP%" %%f in (*.msi) do copy "%%f" "%TMP%"

taskkill /F /IM msiexec.exe /T
6

インストーラーを起動しますが、押さないでください Install > ボタン。それから

cd "%AppData%\..\LocalLow\Sun\Java"

サブディレクトリのいずれかでMSIファイルを見つけます(例:jre1.7.0_25)。

そのサブディレクトリのData1.cabも必要になることに注意してください。

3
Roman Boiko

ツールを使用する必要はありません!!簡単な方法に従うことができます。

どのツールが自己解凍型のセットアッププログラムを作成したかわかりません。そのため、一般的な回答を提供する必要があります。

この性質のほとんどのプログラムは、パッケージファイル(.msi)をTEMPディレクトリに抽出します。この動作は、InstallShield Developerのデフォルトの動作です。

追加情報がなければ、セットアップを起動することをお勧めします。最初のMSIダイアログが表示されたら、TEMPディレクトリで新しく作成されたサブディレクトリまたはMSIファイルを調べることができます。インストーラーをキャンセル/停止する前に、そのMSIファイルをTEMPフォルダーからコピーするだけです。その後、インストールをキャンセルできます。

0
Ajit Medhekar