2017-09-27 13 views
0

私のアプリケーションのセットアップウィザードを生成するために、セットアップ配布プロジェクトをVisual Studio 2013でアプリケーションに追加しました。Setup.msi - サイレントを提供するためのファイルインストール。起動条件でサイレントインストールができない

msiexec /i "<PathToSetupDirectory>\Setup.msi" /qb!が正常に動作します。私のアプリはサイレントモードでインストールされています。しかし、私のC# - アプリケーションは.NET Framework 4.5.1に依存しています。これがインストールされていないと、起動条件が発生します。

このセットアップでは、.NET FrameworkバージョンVersionNumberが必要です。 .NET Frameworkをインストールして、このセットアップを再度実行してください。 .NET FrameworkはWebから入手できます。これを今したいですか?

もちろん、私はこれをしたくありません。これは自動的に機能します。

だから私は、Setup Deployment Project (right click) => Properties => Prerequisites...でフレームワークを選択し、「私のアプリケーションと同じ場所からのダウンロード前提条件」を確認とディレクトリC:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\Bootstrapper\Packages\DotNetFX451NDP451-KB2858728-x86-x64-AllOS-ENU.exeを追加しました。

私の希望は、フレームワークがまだインストールされていない場合、Setup.msiが起動条件のメッセージを表示しないことです。それは単に.Net Frameworkとアプリケーションの後にユーザーの介入なしにインストールする必要があります。しかしそれはまだ現れる。 Noを押すと、インストールが終了します。 はいを押すと、ブラウザが開き、インストールが終了します。

もちろん、.Net Frameworkをサイレントインストールして、必要に応じて私のアプリケーションのサイレントインストールを開始することもできます。しかし、私は"正しい方法"を達成したいと考えています。私は 何かが欠けているという気持ちがあります。

アイデア?

+0

私は、グラフィカルな設定インターフェイス(setup.exe)を試してみました。ここでうまくいろいろなことができます(ユーザーのやりとりで):* .Netのインストール=> PCの再起動=> App-Installation *。だから、Visual Studioの私の設定が正しいようです。しかし、msiファイルを使ってサイレントインストールを行うためのbashスクリプトを書く必要がありますか? – rweisse

答えて

0

このトピックをクリアするためのPhilDWへのThx。これはmsiファイルでは不可能であることを知っておいてください。私はWiXブートストラップツール「Burn」とブートストラップマニフェストジェネレータについて読んで、結論に達して単純なバッチファイルを作成しました。これは.Net Frameworkバージョン4.5が検出されます。1以降がインストールされている場合は、自動的にインストールされます。その後、サイレントmsi-installが開始されます。

silent_install.cmd

@echo off 
set forceNetFrameworkInstall=true 

echo Starting silent installation of Setup.msi and its prerequisites ... 

REG QUERY "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" /v Release 
if %ERRORLEVEL% EQU 0 (goto CHECK) else (goto INSTALL_DOTNET) 

:CHECK 
for /f "tokens=2*" %%a in ('REG QUERY "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" /v Release') do set "releaseKeyHex=%%b" 
set /A releaseKeyDec=%releaseKeyHex% 
if %releaseKeyDec% GEQ 378675 set forceNetFrameworkInstall=false 
if %forceNetFrameworkInstall% == true (
    echo Prerequisite: .Net Framework 4.5.1 or later version not detected 
    goto INSTALL_DOTNET 
) else (
    echo .Net Framework 4.5.1 or later version detected 
    goto INSTALL_APP 
) 

:INSTALL_DOTNET 
echo Installing .Net Framework 4.5.1 ... 
%~dp0\DotNetFX451\NDP451-KB2858728-x86-x64-AllOS-ENU.exe /passive /norestart 
echo Installing .Net Framework 4.5.1 Language Pack (German) ... 
%~dp0\DotNetFX451\NDP451-KB2858728-x86-x64-AllOS-DEU.exe /passive /norestart 
goto INSTALL_APP 

:INSTALL_APP 
echo Installing Application ... 
msiexec /i %~dp0\Setup.msi /qb! 
exit 

このスクリプトは、現在インストールされている.NET Frameworkの(V4.xの)の六角解除キーを読み取り、10進数にこのキーを解析し、最小限のリリースと比較しますキーの番号は.Net Frameworkです。ここには、これらの可能な値のリストがあります:Detecting the .NET Framework (値が高いほど、.NET Frameworkのバージョンが高くなります)。

スクリプトは次のディレクトリツリーに配置する必要があります:

|- setup.exe 
|- Setup.msi 
|- silent_install.cmd 
|+ DotNetFX451 
    |- NDP451-KB2858728-x86-x64-AllOS-DEU.exe 
    |- NDP451-KB2858728-x86-x64-AllOS-ENU.exe 
1

MSIインストールでは、主にMSIセットアップが再帰的に別のMSIセットアップ(NET FW)をインストールできないため、.NET Frameworkもインストールできません。これは、VSセットアップでsetup.exeを使用するMSIファイルの前にインストールする必要がある多くの前提条件が存在する理由の1つです。

setup.exe bootstrapperには私が知る限りサイレントオプションはありませんが、多くの前提条件にサイレントインストールがないためです。

https://msdn.microsoft.com/en-us/library/ms165429.aspx

ので、それはまだ選択肢かもしれ:あなたは前提条件がそれらを静かにするために、コマンドラインでインストール含む埋め込まれたファイルを変更するために使用することができますツール(ブートストラップマニフェストジェネレータ)がありました。

もう1つの選択肢は、WiXブートストラップツール「Burn」を使用してフレームワークをインストールし、MSIをサイレントモードでインストールするバンドルを作成することです。これは、基本的に依存性とMSIファイルのXml駆動仕様です。

+0

ありがとうございます!私は明日それを試み、最新の状態に保ちます! – rweisse

関連する問題