題 為什麼Windows中沒有/ usr / bin?


我是Linux用戶在Windows上花一些時間,我正在努力理解 一些Windows範例,而不是與它們作鬥爭。我注意到每一個 以傳統方式安裝的程序將可執行文件添加到

C:\Program Files

然後添加包含整個路徑的桌面/開始菜單的快捷方式。 但是,沒有與軟件鏈接的公共目錄,即 C:\bin\bar.exe 哪個會鏈接到

C:\Program Files\foo\bar.exe

因此,在安裝應用程序後,只能使用該應用程序 是通過菜單或導航到文件系統中的可執行文件。一 不能簡單 Win-R 打開運行對話然後鍵入 bar 要么 bar.exe 盡可能的 notepad 要么 mspaint。我意識到Windows 8有所改進 這與其他可怕的開始屏幕,它支持鍵入 應用程序的名稱,但這又取決於已註冊的應用程序 這樣。

我會通過添加來做任何傷害 C:\Program Files 遞歸到 Windows路徑?我確實會發現名稱衝突(即 uninstall.exe)但是還有其他問題嗎?


5
2017-11-13 09:30


起源


請注意,Windows Vista中引入了開始菜單中的搜索框(允許您通過鍵入其名稱來查找程序),因此此功能在Windows 8中並不新鮮。 - sleske
安裝程序將應用程序“註冊”到開始菜單中與創建鏈接的應用程序相同 /usr/bin/  - 它依賴於應用程序或安裝程序。 - James Snell
@JamesSnell:是的,但Linux範例最終結果是可在全局路徑上使用的可執行文件。 Windows範例的最終結果是必須知道完整路徑。我對所有可執行文件本身的鏈接的特定目錄不感興趣,而是在路徑中擁有所有用戶運行的可執行文件,並且另外理解為什麼Windows沒有這種範例。 - dotancohen
在DOS時代,通常程序會從C:\創建一個子目錄,並將所有文件(包括臨時文件,配置文件,數據文件和可執行文件)放在該子目錄中。即使在今天,你也會發現一些軟件(通常是已經存在很長時間的程序)(例如UltraTax)。這種繼續使用Windows 3.11,9x窗口,甚至通過NT線來保持與9x線路的兼容性。它正在變得更加明智,恕我直言,UAC和默認權限現在開始嘗試強制執行更明智的事情。 - LawrenceC
如果有兩個名為bar的程序怎麼辦? - Joel Coehoorn


答案:


通常不應該有任何問題。但是,您需要注意兩件事:

  • 避免名稱衝突。特別是,確保標準路徑組件(如 C:\windows 先來,所以沒有系統工具隱藏在路徑中。
  • PATH 變量 最多不得超過8191個字符。因此,如果您要添加許多程序文件夾,則可能需要進行選擇。如果假設每個程序的平均路徑長度為50個字符,則可以為PATH中的大約160個程序提供空間。

默認情況下沒有這樣做的原因可能只是命令行在Windows上相對較少使用,所以從來沒有迫切需要在路徑中包含所有內容。大多數需要調用其他程序的程序已經適應了這一點,並使用完整的調用路徑。

最後,如果你想在命令行上工作很多,比如在Linux上,我建議你安裝 Cygwin的。它在Windows上提供類似Linux的環境,並允許您在命令行上工作。它也保持自己的 PATH 變量,您可以自定義而不會影響其他Windows應用程序。


6
2017-11-13 10:12



謝謝,我實際上現在正在使用Cygwin。但是,Python是一個野獸,需要原始的 cmd,即使有了 -i 旗。 - dotancohen
@dotancohen你可以 請改用WSL 如果你正在運行Windows 10.幾乎完美適用於python開發。 - Andre Terra


答案取決於您所談論的計劃類型。如果你 正在談論使用共享庫(DLL)的程序:

C:\Program Files

對他們來說是正確的地方。您無法將這些程序的文件放入 相同的文件夾,因為他們可能有 名稱衝突。如果你 正在談論使用靜態庫(沒有DLL)的程序:

C:\ProgramData\Bin

對他們來說是正確的地方。這類似於:

/usr/local/bin

在Linux上。該目錄可通過 文件夾變量

ProgramData=C:\ProgramData

如果您需要將具有共享庫的程序添加到Path中,則可以 符號鏈接:

mklink C:\ProgramData\Bin\alfa.exe "C:\Program Files\Alfa\alfa.exe"

0
2017-11-29 01:36