18

Due to user confusion, our app requires separate installers for 32-bit and 64-bit versions of Windows. While the 32-bit installer runs fine on win64, it has the potential to create support headaches and we would like to prevent this from happening.

32 ビット MSI インストーラーが 64 ビット Windows マシンで実行されないようにしたいと考えています。そのために、私は次の条件を持っています。

<Condition Message="You are attempting to run the 32-bit installer on a 64-bit version of Windows.">
  <![CDATA[Msix64 AND (NOT Win64)]]>
</Condition>

Win64 を次のように定義すると:

<?if $(var.Platform) = "x64"?>
<?define PlatformString = "64-bit"?>
<?define Win64 ?>
<?else?>
<?define PlatformString = "32-bit"?>
<?endif?>

問題は、このチェックを正しく機能させることができないということです。常に発火するか、まったく発火しないかのいずれかです。msix64目標は、コンパイル時変数に対してランタイム変数の存在をチェックしWin64、これらが一致しない場合はエラーをスローすることですが、ロジックは意図したとおりに機能していません。誰かがより良い解決策を思いつきましたか?

4

4 に答える 4

15

32 ビット パッケージにのみ Condition 要素を含めます (つまり、?if? プリプロセッサ ステートメントを使用します)。条件は「NOT Msix64」になります: 起動条件は真でなければならないものであるため、Msix64 が設定されている場合、起動条件は失敗します。つまり、それは x64 OS と 32 ビット パッケージであり、正しいことは次のとおりです。ブロック。

于 2010-03-17T17:19:08.997 に答える
7

私たちは以下を使用します...

<?if $(var.ProcessorArchitecture)=x86 ?>
<Condition Message="!(loc.LaunchCondition_Error64)">
    <![CDATA[Installed OR Not VersionNT64]]>
</Condition>
<?endif?>
于 2010-03-18T01:10:29.540 に答える
3

この条件を追加

<Condition Message="This is designed for 32bit OS">%PROCESSOR_ARCHITECTURE ~= "x86" AND %PROCESSOR_ARCHITEW6432 &lt;&gt; "amd64"></Condition>

32 ビット コンポーネントと 64 ビット コンポーネントを含む 1 つのインストーラーを作成し、これら 2 つの条件をそれぞれのコンポーネントに入れることができます。

<Component Id="bit32Component" Guid="..." Feature="ProductFeature">
    <Condition>%PROCESSOR_ARCHITECTURE~="x86" AND %PROCESSOR_ARCHITEW6432&lt;&gt;"amd64"></Condition>
</Component>
<Component Id="bit64Component" Guid="..." Feature="ProductFeature">
    <Condition>%PROCESSOR_ARCHITECTURE~="amd64" OR %PROCESSOR_ARCHITEW6432~="amd64"></Condition>
</Component>

ここに私が使用したリファレンスがあります

http://blogs.msdn.com/david.wang/archive/2006/03/26/HOWTO-Detect-Process-Bitness.aspx

于 2010-03-17T11:45:12.243 に答える
3

condition 要素は、インストール中に存在する Windows インストーラーのプロパティで機能します。

ただし、Win64Windows インストーラーのプロパティではなく、wix 変数として定義しています。Wix 変数は、セットアップが作成されている間のみ存在します。それらを使用する場所として参照する必要が$(var.MyWixVariable)あり、wix プリプロセッサはそれらを定義された値に置き換えます。

代わりにこれを試します:

<?if $(var.Platform) = "x64"?>
<?define PlatformString = "64-bit"?>
<Property Id="Win64" Value="1" />
<?else?>
<?define PlatformString = "32-bit"?>
<?endif?>

セットアップの作成時に正しい値が設定されている場合$(var.Platform)、Windows インストーラー データベース (つまり、MSI ファイル) に「Win64」プロパティが記録され、インストール中にプロパティが条件要素で使用できるようになります。

于 2010-03-17T00:29:58.937 に答える