Tại sao Windows 7 cài đặt ứng dụng 64 bit trong thư mục Tệp chương trình (x86)? Tôi có thể thay đổi hành vi không?


12

Tôi đã sử dụng phiên bản 64 bit của Windows 7 kể từ CTP và đã gặp phải một số vấn đề với các ứng dụng được cài đặt trong C:\Program Files (x86)thư mục. Mục đích của việc có 2 thư mục Tệp Chương trình riêng biệt là gì?

Mỗi chương trình tôi đã cài đặt đã đi vào C:\Program Files (x86)thư mục. Nó dường như không quan trọng nếu ứng dụng là 32 hoặc 64 bit. Tại sao các ứng dụng 64 bit không được đặt vào C:\Program Files?

Có cách nào để thay đổi mặc định để C:\Program Filesthay thế? Nó sẽ làm mọi thứ rối tung lên nếu tôi đặt mọi thứ vào C:\Program Files?

Nếu thực sự có một số lợi ích khi có một thư mục riêng cho các ứng dụng 64 bit, có vẻ như mặc định hợp lý hơn sẽ được sử dụng C:\Program Filescho các ứng dụng x86 và tạo một C:\Program Files (x64)thư mục mới cho các ứng dụng 64 bit mới. Điều này sẽ giúp duy trì khả năng tương thích ngược. Tôi làm việc như một nhà phát triển phần mềm và một số dự án của tôi chứa các tham chiếu đường dẫn đến các thư viện bên dưới C:\Program Files. Bây giờ các tham chiếu đó đã bị hỏng trên máy Windows 7 đã đặt chúng vào C:\Program Files (x86). Tôi thậm chí đã cố gắng thay đổi vị trí mục tiêu trong trình cài đặt thành C:\Program Files, nhưng điều đó đã bị bỏ qua và ứng dụng vẫn tiếp tục C:\Program Files (x86).

Điều này rất khó chịu vì tôi cần chia sẻ mã nguồn giữa các máy 32 và 64 bit và tôi không muốn phải làm phiền với một số tệp cấu hình đặt đường dẫn đến các thư viện này khác nhau trên các máy khác nhau.

Chỉnh sửa về các biến môi trường: (Chỉ sử dụng các giá trị biến tiếng Anh mặc định cho đơn giản.) Trên máy 64 bit %ProgramFiles%sẽ có C:\Program Filestrong khi biến hoàn toàn mới %ProgramFiles(x86)%sẽ là C:\Program Files (x86). Vì vậy, nếu bạn có chương trình 32 bit cần tìm đường dẫn thư mục sẽ được cài đặt bên dưới, thì cần phải kiểm tra xem liệu nó đang chạy trên phiên bản Windows 32 bit hay 64 bit theo thứ tự để biết biến môi trường nào sẽ sử dụng. Bất kỳ ứng dụng 32 bit nào được viết mà không có sự cân nhắc này sẽ cần phải được cập nhật để hoạt động chính xác trên máy 64 bit. Vì vậy, ngay cả khi sử dụng các biến môi trường, khả năng tương thích ngược bị phá vỡ.

Ngoài ra, %ProgramFiles(x86)%không tồn tại trên các phiên bản Windows 32 bit. Nếu đúng như vậy, thì các ứng dụng 32 bit luôn có thể sử dụng biến môi trường đó và sẽ không cần bất kỳ logic điều kiện nào dựa trên hệ điều hành mà chúng đang chạy.


6
Bạn có tích cực những ứng dụng này thực sự là 64-bit? Trong hầu hết các trường hợp, bạn sẽ tìm thấy các chương trình chỉ tương thích 64 bit, nhưng thực sự là các ứng dụng 32 bit.
John T

Tôi tự hỏi nếu sử dụng %ProgramFiles%biến môi trường sẽ giải quyết điều này. Không chắc chắn làm thế nào nó xử lý sự khác biệt x86 / 64 bit.
ceejayoz

Câu trả lời:


7

Lý do cho điều này chỉ đơn giản là nhiều trình cài đặt cũ hơn không hiểu cấu trúc tệp mới và plonk mọi thứ trong thư mục tệp chương trình chuẩn hoặc bạn đang xem một chương trình thông minh có một vài thành phần 32 bit đang được sao chép ở đó.

Đặt cược tốt nhất của bạn là tải xuống một chương trình mới - chẳng hạn như x64 Winrar và chỉ xem nơi nó cài đặt để loại trừ sự cố với máy của bạn.

Đối với việc làm rối tung mọi thứ - nó có thể, nhưng nó thực sự phụ thuộc vào chương trình, không có câu trả lời nào phù hợp với tất cả ... một số chương trình nhỏ hơn, nhỏ gọn chỉ với một vài tệp sẽ không có vấn đề gì, nếu bạn nói về Office , Adobe hoặc bất kỳ "bộ" hoặc chương trình lớn nào khác, rất có thể nó sẽ thất bại vì chúng có nhiều thành phần được chia sẻ là kiến ​​trúc chéo.


Vậy, tại sao Microsoft không đặt "C: \ Program Files" vị trí cho các ứng dụng 32 bit để những trình cài đặt cũ đó không gây ra sự cố. Ngoài ra, tôi không thực sự hiểu tại sao cần phải có một cuộc chia ly. Tại sao tất cả họ không thể đi vào "C: \ Chương trình tập tin"?
CoderDennis

Lý do cả hai không thể là một số ứng dụng (đặc biệt là những ứng dụng có thành phần dùng chung) có các tệp có cùng tên trên 32 bit là 64 bit. Về lý do tại sao nó là như vậy - tôi không biết, có lẽ ai đó có lý do rất tốt vào thời điểm đó và nó chỉ đơn giản là bị mắc kẹt là "việc cần làm".
William Hilsum

4

Nếu bạn sử dụng bất cứ thứ gì khác ngoài %ProgramFiles%(hoặc CSIDL_PROGRAM_FILES, hoặc dưới .NET Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)) thì bạn vẫn gặp rắc rối, vì cài đặt tùy chỉnh có thể có các chương trình được cài đặt theo các tập khác (ví dụ: D) và cài đặt quốc tế thường có các thư mục khác theo mặc định.

  • Tây Ban Nha Windows: C:\Archivos de Programa,
  • Pháp Windows: C:\Programmes,
  • Đức Windows: C:\Programme,
  • Windows Thụy Điển: C:\Program

Vân vân.


Tôi đã không đề cập đến các biến môi trường trong câu hỏi ban đầu của mình để giữ cho nó đơn giản. Tôi vừa thêm một chỉnh sửa chỉ ra cách sử dụng %ProgramFiles%chính xác là nguyên nhân gây ra vấn đề.
CoderDennis

3

Xin lưu ý rằng các phiên bản Windows 7 dưới 64 bit (điều này cũng có thể áp dụng cho các phiên bản HĐH mới hơn khác, nhưng tôi chỉ có thể xác nhận điều này cho Win 7 64 bit) có sự khác biệt giữa vị trí aparent của% ProgramFiles% của bạn trong thám hiểm và trong DOS.

Trong cửa sổ 7, vị trí thư mục vật lý thực tế của% ProgramFiles% (và biến môi trường% ProgramFiles (x86)%) được cố định theo phiên bản tiếng Anh ; tức là "C: \ Chương trình tệp" và "C: \ Chương trình tệp (x86)" respivley, nhưng được hiển thị trong trình khai thác được bản địa hóa khi thích hợp.

Để cung cấp một ví dụ cụ thể; trên bản cài đặt Windows 7 64 bit của Thụy Điển, nếu bạn mở Explorer và tìm trong ổ đĩa hệ thống (thường là C :) bạn sẽ thấy các thư mục " Chương trình " và " Chương trình (x86) ". Nhập% ProgramFiles% vào thanh địa chỉ sẽ chuyển bạn vào "C: \ Chương trình".

Tuy nhiên, nếu bạn mở hộp DOS và gõ SET, bạn sẽ thấy giá trị thực của% ProgramFiles% là "C: \ Program Files" chứ không phải trình khai thác thư mục "C: \ Program" hiển thị cho bạn. Khám phá thêm với CD và DIR, bạn có thể thấy nó thực sự là "C: \ Chương trình tập tin"

Đạo đức là nếu bạn sử dụng các biến đổi môi trường hoặc chương trình thông qua API thì mọi thứ vẫn sẽ hoạt động, nhưng hãy lưu ý đến sự thay đổi tinh tế này khi khám phá hệ thống tệp!


Trong phiên bản tiếng Ba Lan, Tệp Chương trình (x86), là Chương trình Pliki (x86), trong khi Tập tin Chương trình Tập tin là, cũng như Trò chơi Tập tin Chương trình. Tiếng Ba Lan có ngữ pháp kỳ lạ. Ngoài ra, xin vui lòng không gọi nó là một hộp DOS. Không có DOS ở đó.
kinokijuf
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.