0

インストール中、私のアプリケーションは次のようになります。

ステップA、ディレクトリを探しC:\WebServiceます。見つかった場合は、次のようにします。

copy *.bat      --> C:\WebService\
copy boost*.dll --> C:\WebService\libs\
copy myApp.dll  --> C:\WebService\plugins\

ステップB、見つからない場合は、次の手順を実行します。

copy *.bat --> [LocalAppData]\myApp\bin\
copy *.dll --> [LocalAppData]\myApp\libs\

これどうやってするの?

編集:

ステップ2を次の方法で終了しました。

  1. ソースディレクトリを作成します。

    src\bin
    src\libs

  2. これらのサブディレクトリにファイルをコピーします

  3. heatsrcディレクトリをスキャンし、グループをwxsファイルに生成するために使用します。

ここでの問題は、ステップAのように見えますが、同じことをもう一度行う必要があります。しかし、*。dllはたくさんあるので、それらを別のディレクトリに再度コピーするのは良い考えとは思えません。

4

2 に答える 2

3

問題の言い回しは、Windowsインストーラーの理解に大きなギャップがあることを示しています。MSI/WiXはスクリプト言語ではありません。AppSearch、機能、ディレクトリ、コンポーネント、および条件がどのように機能するかを理解する必要があります。基本的に、ファイルをコンポーネントにグループ化し、AppSearchを使用してディレクトリが存在するかどうかを検出する必要があります。次に、条件での検索結果を使用して、インストールするファイルを決定します。

于 2012-08-15T11:11:06.630 に答える
0

わかりました、最終的にそれを解決しました。

要するに、私はこれを助けるためにC++プログラムを書くことによってこれを行います。

詳細は次のとおりです。

私のwxsは次のように始まります:

<Directory Id='TARGETDIR' Name='SourceDir'>
  <Directory Id='WebDir'>
      <Directory Id='INSTALLDIR' Name='$(var.ProductName)'/>
  </Directory>
  <Directory Id='DefaultDir'/>
</Directory>

heat次に、ソースディレクトリを収集して、別のwxsファイルを生成candlelightてリンクするために使用します

それから私のC++プログラムに行きます、それは

  1. 生成されたwxsファイル全体をスキャンして、別のディレクトリ構造を作成します。
  2. ディレクトリ、コンポーネント、ファイルのすべてのIDを置き換えて、それらを一意にします。
  3. すべての新しいコンポーネントの新しいGUIDを生成します。
  4. すべての新しいコンポーネントIDを収集して、新しいコンポーネントグループを作成します。

この新しいコンポーネントグループは、条件付きでインストールするために参照できます。レジストリキーがあるかどうか、またはディレクトリが見つかったかどうかによって異なります。私の場合は次のとおりです。

  <Feature Id='RuntimeChrome' Level='1'>
    <Condition Level='0'>NOT INSTALLDIR_REGCU AND NOT INSTALLDIR_REGLM</Condition>
    <ComponentGroupRef Id='WebGroup' />
  </Feature>
  <Feature Id='RuntimeDefault' Level='1'>
    <ComponentGroupRef Id='DefaultGroup' />
  </Feature>

これらのwxsファイルを使用すると、パッケージをさまざまなシナリオでさまざまな場所にインストールできます。

于 2012-08-18T08:07:13.813 に答える