64ビットバージョンのWindowsでは、32ビットソフトウェアが「c:\ programfiles(x86)」にインストールされます。これは、$(programfiles)を使用して(32ビット)ソフトウェアへのパスを取得できないことを意味します。したがって、MSBuildプロジェクトでこれを克服するには、$(ProgramFiles32)が必要です。実行しているOSに応じてプロジェクトを変更したくありません。
投稿する解決策がありますが、もっと簡単で良い方法があるかもしれません。
64ビットバージョンのWindowsでは、32ビットソフトウェアが「c:\ programfiles(x86)」にインストールされます。これは、$(programfiles)を使用して(32ビット)ソフトウェアへのパスを取得できないことを意味します。したがって、MSBuildプロジェクトでこれを克服するには、$(ProgramFiles32)が必要です。実行しているOSに応じてプロジェクトを変更したくありません。
投稿する解決策がありますが、もっと簡単で良い方法があるかもしれません。
私の解決策は、「c:\ program files(x86)」が存在するかどうかを確認することです。存在する場合は、これが64ビットOSであると想定します。それ以外の場合は、通常のプログラムファイルディレクトリを使用します。
<PropertyGroup>
<ProgramFiles32 Condition="Exists('$(PROGRAMFILES) (x86)')">$(PROGRAMFILES) (x86)</ProgramFiles32>
<ProgramFiles32 Condition="$(ProgramFiles32) == ''">$(PROGRAMFILES)</ProgramFiles32>
</PropertyGroup>
こんな感じで使えます
<Exec WorkingDirectory="src\app1" Command='"$(ProgramFiles32)\doxygen\bin\doxygen" Doxyfile' />
MSBuild 4.0では$(MSBuildProgramFiles32)
、32ビットのプログラムファイルディレクトリが提供されます。
試す"$(MSBuildExtensionsPath32)\.."
もう少し信頼できる方法は、環境変数「ProgramFiles(x86)」を取得することだと思います。Windowsの64ビットプロセスでは、これは32ビットプログラムファイルディレクトリを指します。32ビットバージョンのWindowsでは空になり、wow64プロセスを信じています
最近、いくつかのPowerShellスクリプトで実質的に同じ問題が発生しました。プログラムファイルディレクトリの問題を回避する方法についてのブログエントリを作成しました。明らかに異なる言語ですが、それはあなたを助けるかもしれません。
http://blogs.msdn.com/jaredpar/archive/2008/10/21/program-files-i-just-want-the-32-bit-version.aspx
MSbuild で 32 ビット OS か 64 ビット OS かを確認する一般的な方法を見つけようとして、この質問に出くわしました。他の誰かがこれを見つけた場合に備えて、私は以下を使用しました:
<PropertyGroup>
<OSBits Condition="$(ProgramW6432) != ''">x64</OSBits>
<OSBits Condition="$(OSBits) == ''">x32</OSBits>
</PropertyGroup>
どうやら%ProgramW6432%
、64ビットシステムでのみ設定されています。
Visual Studio ツールの 32 ビット バージョンを実行する場合 (特に VS2012 では、選択できる 3 つの異なるコマンド プロンプトがあります)、$(ProgramFiles) は「Program Files (x86)」を指します。