2016-11-16 12 views
1

msiを作成しています。 OSのアーキテクチャに関係なく、1つのファイルをSystem32フォルダにコピーする必要があります。 SystemFolderプロパティを使用すると、x64のSysWOW64フォルダに表示されます。同じmsiにSystem64FolderSystemFolderを使用することができますか?これを行う方法は他にありますか?64ビットOS上でSystem32にファイルをコピー

+0

あなたが 'SystemFolder'を使用している場合、64ビットOS上でも '' '' C:\ Windows \ System32 '' 'を取得しますか?これは32ビットOSでも同じです。 – harper

+0

'SysWOW64' *は32bファイル用です – PeeHaa

+0

@harper no。 SystemFolderを使用すると、私はSysWOW64を取得します。私は32ビットOSでSystem32を手に入れました。 x64 OSでもC:\ Windows \ System32にコピーする必要があります –

答えて

2

ネイティブの64ビットシステムフォルダにファイルをインストールすることはできません。 32ビットのWoW64フォルダにリダイレクトされ、冗長なログにWIN64DUALFOLDERSリダイレクトが表示されます。ドキュメントはここに言うように:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa367451(v=vs.85).aspx

32ビットのMSIは32ビットコンポーネントを含めることができます。したがって、ファイルをネイティブの64ビット・フォルダにインストールする32ビット・インストールでは、64ビット・コンポーネントをインストールすることはできません。

異なる設定が異なるアーキテクチャのために必要とされています

https://blogs.msdn.microsoft.com/heaths/2008/01/15/different-packages-are-required-for-different-processor-architectures/

ので、一つの解決策は、そのファイルをインストールするには、64ビットのセットアップを含んWiXのバーンバンドルだろう。

+0

32bitインストールから64bitシステムフォルダに何かを書き込もうとしたことはありませんでした。なぜなら、サードパーティのライブラリdllがそこにあり、dllロードオーダーが最初に見つかった場合に起こりうる悪い動作を見てきたからです。私は、コンポーネントのWin64タグは、レジストリ関連の要素でWin64タグのように動作すると仮定しました。 –

1

64ビットマシンの "System32"フォルダに明示的に64ビットで入る必要のあるコンポーネントをマークし、その事実を条件にします。

<Component Id="IAmA64BitBinary" Win64="yes" Directory="SystemFolder"> 
    <Condition>VersionNT64</Condition> 
    <File Id="IAmTheBinary" KeyPath="yes" Source="file.dll"> 
</Component> 

「Win64のは=」Y​​ES「」これは、64ビットSystemFolderを参照して、条件がこの成分にのみ、このシステムフォルダが実際に存在する64ビットマシンにインストールを確実にすることを示しています。

条件が必要な場合は100%確信はありませんが、私は推測していません。あなたには、いくつかの64ビットコンポーネントを必要としている場合、私はあなたが起動条件は(も

<Comdition message="Must install on a 64-bit OS">VersionNT64</Condition> 
は注意することは、あなたのinstalltionに追加した示唆し、私たちはので、この起動条件に追加する「またはインストール」する必要はありません。 VersionNT64プロパティは、インストールとアンインストール/アップグレードの間で変更できません)。

関連する問題