既然你可以合理地保證:如系統安裝在同一驅動器上存在
- 程序文件目錄。
- 它們被命名爲x64和x86的Program Files,以及x64的Program Files(x86)。
然後,你可以做這樣的事情:
public static void Main(string[] args)
{
string baseDirectory = Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System));
string programFiles = "Program Files";
string programFilesX86 = "Program Files (x86)";
Console.WriteLine(Environment.Is64BitProcess ? "64-Bit Process" : "32-Bit Process");
if (Environment.Is64BitOperatingSystem)
{
Console.WriteLine("64-bit operating system");
Console.WriteLine("Program Files Directory: " + Path.Combine(baseDirectory, programFiles));
Console.WriteLine("Program Files x86 Directory: " + Path.Combine(baseDirectory, programFilesX86));
}
else
{
Console.WriteLine("32-bit operating system");
Console.WriteLine("Program Files Directory: " + Path.Combine(baseDirectory, programFiles));
}
Console.ReadKey(true);
}
不過,有一點需要注意:
程序文件目錄可以被改變,雖然它不被支持微軟可能會導致其他系統問題。
所以,我會跟着那些好Directory.Exists
,如果你沒有找到他們,那麼你可以看看註冊表。你正在尋找的關鍵是:
HKLM \ SOFTWARE \微軟\的Windows \ CurrentVersion \
- ProgramFilesDir的
- ProgramFilesDir的(86)
但同樣,有註冊表訪問是一些難以獲得的警告,當使用Registry
類時,它將根據處理器體系結構選擇64位或32位註冊表請求它的過程。您可以指定64位目錄。不想太過分,有很多關於如何閱讀註冊表的教程。
另外請注意,這隻適用於Windows Vista和以上,我不記得奇怪的Windows XP-64如何處理它,或舊版本的Windows Server。
最後一個註釋,Linux/Android/iOS(也就是Mono兼容的操作系統或Micro Framework)沒有「Program Files」目錄,因此請確保您意識到您正在編寫特定於操作系統的代碼。如果您希望使其更加獨立於操作系統,請考慮編寫一個函數,該函數可以基於當前操作系統爲默認安裝目錄返回一組字符串。
將您的項目的構建屬性更改爲Build -'Platform target = AnyCpu'如果您不熟悉,則右鍵單擊該項目,然後選擇屬性,然後單擊左側的Build節點並將x86更改爲AnyCPU' – MethodMan
@MethodMan這是我的項目中已選擇的選項。任何其他建議? –
什麼是選擇的選項改變它..因爲我剛剛建議..我試着你的代碼和'AnyCPU和x64'都返回'C:\ Program Files文件'與'C:\ Program Files文件(x86)' – MethodMan