2012-03-05 12 views
0

msiでパッケージ化されたファイルを、ユーザーが提供する外部ファイルに置き換えることができるようにしたいと考えています(インストールする会社に固有のいくつかの設定を上書きしますソフトウェア)、およびファイルのフォルダ(5月または存在しないかもしれない、内容が頻繁に変更される)をコピーして、コピー先のフォルダにコピーします。可能なファイルをmsi /カスタムアクションでコピーします

現在、フォルダやファイルをmsiと一緒にフォルダやCDに入れ、カスタムアクションを使用してmsiと同じフォルダ内のフォルダとファイルを探します。インストーラがローカルコンピュータから実行されている限り、これは正常に機能します。インストーラがネットワーク上の場所から実行されている場合、カスタムアクションは、制限された権限のためにmsiが入っているフォルダに到達できません。

権限の問題を回避する方法はありますか、またはそれらのファイルを適切な場所に置く方法がありますか?

+0

インストーラのいくつかのファイルを交換可能にしたい場合は、 "PackageAs = vsdpaLoose"を設定できます。これらのファイルはmsiと同じフォルダに格納されます。必要でない場合は、 "Vital = false"を設定することもできます。セットアッププロジェクト内では、msiの一部として扱われます。 – nik

+0

@milter良いアイデアだけど、Vital = Falseは、ファイルが見つからないとインストーラが失敗するので、うまくいきません。 msiがファイルをインストールしようとしたときにプロパティが不安になってしまい、失敗するかどうかは不明です。 – Septih

+0

はい、あなたは正しいです、申し訳ありません。かなり前に、私はそれを手抜きました。インストーラはまだ失敗しますが、無視して続行するオプションがあります。だから、インストールは正常に終了しますが、ユーザーにとってはうまく見えません。それでも、コンテナファイルを使用することができます。コンテナファイルは空であってもなくてもかまいません(例:zip)。 – nik

答えて

0

私の解決策は、カスタムアクション中にインストールディレクトリ内のファイルにmsiの場所を保存し、実際のプログラムでその場所を使用して外部ファイルを見つけ、それらをコピーすることでしたそれらへのアクセス)。それはエレガントではありませんが、それを試している顧客のために働くようです。

0

カスタムアクションですべてのシナリオを処理するには、2つの操作が必要です。最初は偽装(非システムコンテキスト)で実行され、ソースの場所からTempFolderなどのものにコピーされます。 2番目は偽装(システムコンテキスト)なしで実行され、TempFolderから目的の場所にコピーされます。

また、実行時に情報でDuplicateFileまたはMoveFileテーブルを移入するsemi-custom actionsと呼ばれる手法を探索することもできます。理想的には、これは組み込みの機能を活用し、依然として必要なアクセスを得ることができますが、動作を自分で検証していません。

+0

デフォルトでは、カスタムアクションは偽装で実行する必要があります。このアクションの前にnoimpersonateビットを設定するスクリプトがあることは分かっていますが、削除してもアクションはソースディレクトリにアクセスできませんでした。私はセミカスタムアクションを見ていきますが、ビジュアルスタジオツールではなくwixを使って作業するほうが簡単です。 – Septih

関連する問題