管理されたブートストラップアプリケーションを使用して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つの問題があります。
- は昇格された権限が必要です。常にこの新しいパッケージをキャッシュするので、ユーザーは常にインストールするために昇格された権限を必要とします。
- インストール中に昇格された権限を要求するUACダイアログは表示されません。代わりに、
C:\ProgramData\Package Cache
へのアクセスが拒否されたため、インストーラは失敗します。回避策は管理者として実行することです。
#2は、マシン単位のキャッシュにアクセスする許可を求める必要があるため、バーンバグと思われます。私の質問は、私はカスタムの場所にキャッシュできますか?マシン単位のパッケージをユーザーごとのフォルダに強制的に書き込むことは可能ですか?私はこれを行うための設定オプションは表示されません。
これを行うより良い方法がある場合は、ここでいくつかの文脈を提供しようとしました。私の全体的な目標は、最初のインストール時にスキップされた変更を介してユーザーがパッケージをインストールできるようにすることです。これを行うより良い方法がある場合は、私に知らせてください。