2017-05-18 7 views
0

管理されたブートストラップアプリケーションを使用してWiXバンドルインストーラをビルドします。最近、マシンごとにインストールする新しいMsiPackageを追加しましたが、ユーザーがチェックボックスを使用してオプトインする場合にのみインストールされます。ユーザーは、このパッケージをインストールするために、後でプログラムと機能からインストールを変更することができます。これは、バンドル内の唯一のマシン単位のパッケージです。残りはユーザーごとです。特権を持たないインストールを許可することが重要です。なぜなら、このマシンごとのパッケージはオプションであるからです。変更中に昇格された権限を要求しても問題ありません。唯一WiXインストーラ:初期インストール時にスキップされたパッケージを含むようにインストールを変更します。

<MsiPackage Id="optional_package" 
      Cache="yes" Compressed="yes" Visible="no" 
      DisplayInternalUI="no" 
      SourceFile="..\Resources\OptionalPackage.msi" /> 

パッケージは、バンドルの最初のインストール時にインストールされていない場合は、それがキャッシュされないだろう、ということであった。この設定の問題(Cache="yes"

もともと、私はそうのような新しいパッケージを構成しパッケージがインストールされている場合はキャッシュします)。このパッケージをインストールするためにユーザーがインストールを変更しようとすると、burnがOptionalPackage.msiのソースを見つけることができないため、その操作は失敗します。

<MsiPackage Id="optional_package" 
      Cache="always" Compressed="yes" Visible="no" 
      DisplayInternalUI="no" 
      SourceFile="..\Resources\OptionalPackage.msi" /> 

は、これが最初の問題を修正しましたが、新しい問題を作り出した:私はパッケージが常にキャッシュされることを要求することによって、この問題を回避することができました。 OptionalPackage.msiはマシンごとにインストールされるため、burnは%LocalAppData%\Package Cache(ユーザー単位のキャッシュ)ではなくC:\ProgramData\Package Cache(マシン単位のキャッシュ)でキャッシュしようとします。これには2つの問題があります。

  1. は昇格された権限が必要です。常にこの新しいパッケージをキャッシュするので、ユーザーは常にインストールするために昇格された権限を必要とします。
  2. インストール中に昇格された権限を要求するUACダイアログは表示されません。代わりに、C:\ProgramData\Package Cacheへのアクセスが拒否されたため、インストーラは失敗します。回避策は管理者として実行することです。

#2は、マシン単位のキャッシュにアクセスする許可を求める必要があるため、バーンバグと思われます。私の質問は、私はカスタムの場所にキャッシュできますか?マシン単位のパッケージをユーザーごとのフォルダに強制的に書き込むことは可能ですか?私はこれを行うための設定オプションは表示されません。

これを行うより良い方法がある場合は、ここでいくつかの文脈を提供しようとしました。私の全体的な目標は、最初のインストール時にスキップされた変更を介してユーザーがパッケージをインストールできるようにすることです。これを行うより良い方法がある場合は、私に知らせてください。

答えて

0

私はこの問題を解決しましたので、私は他の人が見つけるためにここに答えを投稿すると思いました。私は、キャッシング問題を回避するために、オプションパッケージをキャッシュするのではなく、オンデマンドでダウンロードすることで終了しました。 Compressed="no"と設定してDownloadUrlと設定してください。

<MsiPackage Id="optional_package" 
      Cache="yes" Compressed="no" Visible="no" 
      DisplayInternalUI="no" 
      SourceFile="..\Resources\OptionalPackage.msi" 
      DownloadUrl="https://example.com/download/OptionalPackage.msi" /> 

パッケージをインストールする必要がある場合、WiXは自動的にダウンロードします。 SourceFileで定義されたファイルとDownloadUrlで定義されたファイルは正確に一致する必要があります。 WiXはSourceFileをハッシュし、インストーラに保存します。ダウンロード後にファイルはDownloadUrlにハッシュされ、ハッシュが一致する場合にのみインストールされます。

このソリューションは、内部接続が必要なため理想的ではありませんでしたが、要件を満たす他の方法はありませんでした。私たちの主な問題は、この.msiがマシン単位のパッケージであり、インストーラがユーザーごとに実行されていることです。私たちは、FireGiantと協議を持っていたとしても、上記の私の他の質問のいくつかに答えを学んだ:

  1. インストーラ内 からパッケージのキャッシュの場所を定義することはできません。これは、ユーザーのローカルマシンのシステム 管理者によってWindowsでは設定できますが、当社の インストーラでは設定できません。
  2. 私が記述した状況でWiXが昇格特権を要求しなかったという事実は、本当に火傷のバグです。
関連する問題