TL; DR:
Tóm lại, không, nó không cần thiết ; họ có thể đã sử dụng một thư mục duy nhất và không, Windows không hiển thị khác với chương trình đang chạy từ vị trí này hay vị trí khác.
Chà, mọi người dường như đang đưa ra ý kiến của họ về vấn đề này, vì vậy tôi sẽ đưa ra 2. Những người khác đã phỏng đoán về lý do tại sao Microsoft chọn tạo các thư mục cấp cao nhất riêng biệt cho các phiên bản chương trình 32 bit và 64 bit, vì vậy tôi sẽ bỏ phần đó (lý do tốt nhất là lời giải thích của David rằng đó là một thuận tiện cho lập trình viên). Tất nhiên ngay cả sau đó, nó không hoàn toàn giải quyết câu hỏi trực tiếp tại sao điều này thậm chí còn cần thiết? , mà câu trả lời có lẽ là: không phải vậy .
Thay vào đó, tôi sẽ giải quyết phần chính của câu hỏi
Windows bằng cách nào đó trình bày chính nó khác với một chương trình hết "Tệp chương trình (x86)"?
Không thực sự, nhưng vị trí của chương trình có thể ảnh hưởng đến hành vi, nhưng không phải theo cách bạn nghĩ.
Khi bạn chạy một chương trình, Windows sẽ thiết lập một môi trường để chạy nó (ý tôi là về bộ nhớ, địa chỉ, v.v., không chỉ các biến môi trường). Môi trường này phụ thuộc vào nội dung của tệp thực thi (chương trình 32 bit và 64 bit khác nhau trong nội bộ). Khi bạn chạy chương trình 32 bit trên hệ thống 64 bit, nó chạy trong hệ thống con 32 bit mô phỏng môi trường 32 bit. Nó được gọi là WoW64 (WoW64 là viết tắt của Windows trên Windows 64 bit ) và tương tự như cách các ứng dụng 16 bit sẽ được chạy trong XP bằng NTVDM .
Khi bạn chạy một chương trình có hoặc không có đặc quyền của quản trị viên, nó sẽ ảnh hưởng đến cách chạy, nhưng vị trí sẽ không ảnh hưởng đến nó (mặc dù có một số ví dụ về sự phụ thuộc vị trí như một số trình điều khiển chẳng hạn).
(Tôi đang sử dụng một máy tính khác, vì vậy tôi không thể dựa vào lịch sử trình duyệt của mình để quay lại các bước của mình, nhưng vào ngày khác khi trả lời câu hỏi SU này, tôi đã kết thúc câu hỏi SO này dẫn đến Google PROCESSOR_ARCHITEW6432 dẫn đến câu hỏi SO này và blog này của Microsoft đăng .)
Ở đâu đó, tôi đọc một bài đăng StackOverflow về cách biến envirnoment %processor_architecutre%
cho các kết quả khác nhau tùy thuộc vào nơi bạn chạy dấu nhắc lệnh (Tôi sẽ cố gắng tìm trích dẫn chính xác).
Câu trả lời hóa ra là do phiên bản 32 bit hoặc 64 bit của dấu nhắc lệnh đã được chạy (tức là từ System32\
hoặc SysWoW64\
). Nói cách khác, trong khi vị trí dường như ảnh hưởng đến hành vi của chương trình, thì đó chỉ là do có các phiên bản khác nhau của chương trình chứ không phải vì Windows xử lý thư mục theo cách đặc biệt.
Điều này có ý nghĩa bởi vì nội dung của tệp thực thi ra lệnh cho dù đó là 32 bit hay 64 bit, vì vậy bạn có thể đặt cả bản sao 32 bit và 64 bit của cùng một chương trình (ví dụ: foobar32.exe
và foobar64.exe
) vào cùng một thư mục và khi bạn thực hiện chúng, chúng sẽ được tải một cách chính xác (phiên bản 64 bit sẽ được chạy nguyên bản và phiên bản 32 bit sẽ được chạy trong lớp mô phỏng WoW64).
FreePascal cho phép bạn cài đặt cả hai phiên bản DOS và Windows và chúng đi trong cùng một thư mục : %programfiles%\FreePascal
. Nó quản lý các kiến trúc khác nhau bằng cách giữ các file thực thi ( .exe
, .sys
, .dll
, .ovr
, vv) trong thư mục riêng biệt và chia sẻ các file tài nguyên như hình ảnh, nguồn tập tin, vv) Không có lý do kỹ thuật mà điều này có thể không còn được thực hiện cho 32 và Phiên bản 64 bit của một chương trình. Giống như David đã nói, lập trình viên sẽ dễ dàng hơn nếu chúng được giữ riêng biệt (nghĩa là sử dụng các biến để làm cho nó trông giống như chỉ có một bộ tệp, v.v.)