0

インストーラー プロジェクトを VS 2008 から VS 2012 にマージし、続いて基本的な Windows インストーラーから Wix インストーラーにマージします。必要なすべての MSI を出力する標準の Wix インストーラー プロジェクトを作成しました。

これで、WPF/XAML (Win 8 スタイル) でカスタム UI を作成し、独自の UI を使用してプロジェクトをインストールするブートストラップ プロジェクトを作成しました。インストールとアンインストールなど、基本的な操作は問題なく機能します。

「高度な」パネルを使用して、ユーザーがインストール ディレクトリとインストール スコープ (ユーザーごとまたはマシンごと) を変更できるようにしたいと考えています。コード ビハインドで設定を取得できますが、これらのパラメーターをインストーラーに渡すことができません。

私のディレクトリツリーは次のように定義されています:

<Directory Id='TARGETDIR' Name='SourceDir'>
  <Directory Id='ProgramFilesFolder' Name='PFiles'>
     <Directory Id='INSTALLDIR' Name='$(var.ProductName)  $(var.CustomerAcronym) v$(var.Version)'>
        <Component Id='MainService' Guid="5E68A5A7-E9B3-4156-B84C-E8D7AA3DCBCC">

これを処理する方法に関するヒント、ユーザー定義のパスとスコープを Wix インストーラーに渡す方法はありますか?

4

1 に答える 1

1

UIで、次のようなブートストラッパー文字列変数にインストールパスを設定します。

BootstrapperApplication.Engine.StringVariables["INSTALLPATH"] = "C:\somePath\someDir";

次に、bundle.wxsで、文字列変数をプロパティとして次のように渡します。

<MsiPackage SourceFile="MyPackage.msi" Id="MyPackage">
    <MsiProperty Name="INSTALLDIR" Value="[INSTALLPATH]" />
</MsiPackage>

アップデート

ディレクトリパスに記号[および]が含まれている場合、エンジンはパスのこの部分を変数として解決します。

BootstrapperApplication.Engine.StringVariables["INSTALLPATH"] = "C:\[somePath]\someDir";

この場合、変数[somePath]はWixバンドルに存在しないため、INSTALLPATHは「C:\someDir」になります

UIからディレクトリパスを指定する場合は、変数をエスケープすることをお勧めします。

string directoryPathFromUser = "C:\[somePath]\someDir";
BootstrapperApplication.Engine.StringVariables["INSTALLPATH"] = 
    BootstrapperApplication.Engine.EscapeString(directoryPathFromUser);
于 2012-11-29T14:29:27.657 に答える