やりたいこと
コード上で、Program Files
のフォルダを取ってくるときに、
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)
を使ってパスを取得していたが、ある日**「なんかいつの間にかフォルダのパス変わってるんですけど?」**と言われてしまった。
(この時は、ファイル選択Dlgの表示時の初期パスとして、上記を使っていた)
なぜそうなったか?調べたい。
なぜそうなったか?
以前は対象のアプリをAnyCPUでビルドしていたが、今はx64でビルドすることになっていた。
使っていたEnvironment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)
は、ビルド時のプラットフォームを何にするか(=x64,86どちらのプロセスとして動作するか)で返すパスが変わる。それが原因だった。
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)の返す値
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)と
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)の返すパスは
ビルド時のプラットフォーム設定によって下記の通り。
※32bitWindowsで動かしたときにどうなるかは試してない。
参考
MSDocs(Environment.SpecialFolder Enum)
https://docs.microsoft.com/en-us/dotnet/api/system.environment.specialfolder?view=netcore-3.1
ここに書かれていた。