Environment.SpecialFolder.CommonProgramFilesとEnvironment.SpecialFolder.CommonProgramFilesX86の違いがドキュメントだけでは良く分からなかったので、軽くスパイク。
使用ソース (C# 4.0) §
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication30
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("CommonProgramFiles={0}", System.Environment.GetFolderPath(Environment.SpecialFolder.CommonProgramFiles));
Console.WriteLine("CommonProgramFilesX86={0}", System.Environment.GetFolderPath(Environment.SpecialFolder.CommonProgramFilesX86));
}
}
}
実行結果: Win7 x86 WOW64 §
- CommonProgramFiles=C:\Program Files (x86)\Common Files
- CommonProgramFilesX86=C:\Program Files (x86)\Common Files
実行結果: Win7 x64 native §
- CommonProgramFiles=C:\Program Files\Common Files
- CommonProgramFilesX86=C:\Program Files (x86)\Common Files
実行結果: Windows XP x86(仮想マシン) §
- CommonProgramFiles=C:\Program Files\Common Files
- CommonProgramFilesX86=
まとめ §
CommonProgramFilesX86は結果が得られないことがあり、参照は望ましくない。結果が得られる環境と判定される場合のみに限定して使用すべき。
では、CommonProgramFilesを使えばいいのかといえば、x64 nativeでは(x86)のフォルダを参照してくれない。x86用だけ提供してお茶を濁したいときには向かない。
結局、常にx86側を指し示すには以下のようなルールが良いのだろうか。
- CommonProgramFilesX86の取得を試みる
- 中身がある場合はそれを採用
- 中身がない場合はCommonProgramFilesを取得して結果とする
御意見があればどうぞ。