เหตุใด Windows 7 จึงติดตั้งแอป 64 บิตในโฟลเดอร์ Program Files (x86) ฉันจะเปลี่ยนพฤติกรรมได้อย่างไร


12

ฉันใช้ Windows 7 รุ่น 64 บิตตั้งแต่ CTP และพบปัญหาเล็กน้อยเกี่ยวกับแอปพลิเคชันที่ติดตั้งในC:\Program Files (x86)โฟลเดอร์ วัตถุประสงค์ของการมี 2 ไดเรกทอรีไฟล์โปรแกรมแยกต่างหากคืออะไร?

ทุกโปรแกรมที่ฉันติดตั้งเข้าไปในC:\Program Files (x86)โฟลเดอร์แล้ว ดูเหมือนจะไม่สำคัญว่าแอพนี้มีขนาด 32 หรือ 64 บิต ทำไมคุณไม่ปพลิเคชัน 64 บิตได้รับการวางไว้ในC:\Program Files?

มีวิธีการเปลี่ยนค่าเริ่มต้นที่จะมาC:\Program Filesแทนที่หรือไม่? มันจะเลอะเทอะถ้าฉันใส่ทุกอย่างลงไปC:\Program Files?

หากมีประโยชน์บางอย่างในการมีโฟลเดอร์แยกต่างหากสำหรับแอพ 64 บิตดูเหมือนว่าค่าเริ่มต้นที่สมเหตุสมผลจะต้องใช้C:\Program Filesกับแอพ x86 และสร้างC:\Program Files (x64)โฟลเดอร์ใหม่สำหรับแอป 64 บิตใหม่ สิ่งนี้จะช่วยรักษาความเข้ากันได้ย้อนหลัง C:\Program Filesผมทำงานเป็นนักพัฒนาซอฟต์แวร์และบางส่วนของโครงการของฉันมีการอ้างอิงเส้นทางไปยังห้องสมุดภายใต้ ตอนนี้อ้างอิงเหล่านี้จะเสียบนเครื่อง Windows 7 C:\Program Files (x86)ที่ได้วางไว้ใน ฉันได้ลองเปลี่ยนตำแหน่งเป้าหมายในตัวติดตั้งเป็นC:\Program Filesแต่มันก็ถูกเพิกเฉยและแอพก็ยังเข้าไปC:\Program Files (x86)อยู่ดี

สิ่งนี้น่าผิดหวังมากเพราะฉันต้องการแบ่งปันซอร์สโค้ดระหว่างเครื่อง 32-64 บิตและฉันไม่ต้องการยุ่งกับไฟล์กำหนดค่าบางอย่างที่กำหนดพา ธ ไปยังไลบรารี่เหล่านี้ในเครื่องที่แตกต่างกัน

แก้ไขเกี่ยวกับตัวแปรสภาพแวดล้อม: (. โดยใช้เพียงค่าเริ่มต้นของตัวแปรภาษาอังกฤษสำหรับความเรียบง่าย) บนเครื่อง 64 บิต%ProgramFiles%จะเป็นC:\Program Filesในขณะที่แบรนด์ตัวแปรใหม่จะ%ProgramFiles(x86)% C:\Program Files (x86)ดังนั้นหากคุณมีโปรแกรม 32 บิตที่ต้องการค้นหาเส้นทางโฟลเดอร์ที่จะติดตั้งภายใต้จะต้องตรวจสอบเพื่อดูว่ามันทำงานบน Windows รุ่น 32 บิตหรือ 64 บิตตามลำดับ เพื่อทราบตัวแปรสภาพแวดล้อมที่จะใช้ แอป 32 บิตใด ๆ ที่เขียนขึ้นโดยไม่มีการพิจารณานี้จำเป็นต้องได้รับการอัปเดตเพื่อให้ทำงานได้อย่างถูกต้องบนเครื่อง 64 บิต ดังนั้นแม้แต่การใช้ตัวแปรสภาพแวดล้อมความเข้ากันได้แบบย้อนหลังก็ใช้งานไม่ได้

ยัง%ProgramFiles(x86)%ไม่มีอยู่ใน Windows รุ่น 32 บิต ถ้าเป็นเช่นนั้นแสดงว่าแอป 32 บิตสามารถใช้ตัวแปรสภาพแวดล้อมนั้นตลอดเวลาและไม่จำเป็นต้องใช้ตรรกะตามเงื่อนไขใด ๆ โดยขึ้นอยู่กับระบบปฏิบัติการที่ใช้งานอยู่


6
คุณคิดว่าแอพเหล่านี้เป็นแบบ 64 บิตใช่ไหม ในกรณีส่วนใหญ่คุณจะพบโปรแกรมที่เข้ากันได้กับ 64- บิต แต่แท้จริงแล้วเป็นแอปพลิเคชัน 32- บิต
John T

ฉันสงสัยว่าการใช้%ProgramFiles%ตัวแปรสภาพแวดล้อมจะแก้ไขได้ไหม ไม่แน่ใจว่ามันจัดการกับความแตกต่างของ x86 / 64 บิตได้อย่างไร
ceejayoz

คำตอบ:


7

เหตุผลนี้เป็นเพียงตัวติดตั้งรุ่นเก่าจำนวนมากที่ไม่เข้าใจโครงสร้างไฟล์ใหม่และทำทุกอย่างในไดเรกทอรีไฟล์โปรแกรมมาตรฐานหรือคุณกำลังดูโปรแกรมอัจฉริยะที่มีส่วนประกอบ 32 บิตเล็กน้อยซึ่งถูกคัดลอกมาที่นั่น

ทางออกที่ดีที่สุดของคุณคือการดาวน์โหลดโปรแกรมใหม่ - เช่นx64 Winrarและดูว่ามันติดตั้งที่ไหนเพื่อแยกแยะปัญหากับเครื่องของคุณ

สำหรับเรื่องของการเลอะ - มันสามารถทำได้ แต่มันขึ้นอยู่กับโปรแกรมนั้นจริงๆไม่มีคำตอบใดที่เหมาะกับทุกคน ... โปรแกรมขนาดเล็กกะทัดรัดที่มีไฟล์เพียงไม่กี่ไฟล์ก็น่าจะไม่มีปัญหาที่ไหนเช่นถ้าคุณพูดถึง Office , Adobe หรือ "ชุด" อื่น ๆ หรือโปรแกรมขนาดใหญ่ส่วนใหญ่จะล้มเหลวเนื่องจากมีส่วนประกอบที่ใช้ร่วมกันหลายตัวที่เป็นสถาปัตยกรรมข้าม


ดังนั้นทำไม Microsoft ไม่สร้าง "C: \ Program Files" ให้กับที่ตั้งสำหรับแอพ 32 บิตเพื่อให้ผู้ติดตั้งเก่าเหล่านั้นไม่ก่อให้เกิดปัญหา นอกจากนี้ฉันไม่เข้าใจจริงๆว่าทำไมต้องแยกจากกัน ทำไมพวกเขาไม่สามารถเข้าไปที่ "C: \ Program Files" ได้?
CoderDennis

เหตุผลที่ทั้งคู่ไม่สามารถทำได้คือบางแอปพลิเคชัน (โดยเฉพาะอย่างยิ่งแอปที่มีส่วนประกอบที่ใช้ร่วมกัน) มีไฟล์ที่มีชื่อเดียวกันบน 32- บิตเป็น 64- บิต สำหรับสาเหตุที่เป็นเช่นนี้ - ฉันไม่มีความคิดใครบางคนอาจมีเหตุผลที่ดีมากในเวลานั้นและมันก็ติดอยู่ในฐานะ "สิ่งที่ต้องทำ"
William Hilsum

4

หากคุณใช้สิ่งอื่นนอกเหนือจาก%ProgramFiles%(หรือCSIDL_PROGRAM_FILESหรือภายใต้. NET Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)) คุณมีปัญหาอยู่แล้วเนื่องจากการติดตั้งแบบกำหนดเองสามารถมีโปรแกรมที่ติดตั้งภายใต้ไดรฟ์ข้อมูลอื่น (D: เป็นต้น) และการติดตั้งระหว่างประเทศมักจะมีโฟลเดอร์อื่นตามค่าเริ่มต้น

  • Windows ภาษาสเปน: C:\Archivos de Programa,
  • Windows ภาษาฝรั่งเศส: C:\Programmes,
  • Windows ภาษาเยอรมัน: C:\Programme,
  • Windows ภาษาสวีเดน: C:\Program

เป็นต้น


ฉันไม่ได้พูดถึงตัวแปรสภาพแวดล้อมในคำถามดั้งเดิมของฉันเพื่อให้ง่าย ฉันเพิ่งเพิ่มการแก้ไขที่ชี้ให้เห็นว่าการใช้%ProgramFiles%เป็นสิ่งที่ทำให้เกิดปัญหาอย่างแน่นอน
CoderDennis

3

โปรดทราบว่าภายใต้ Windows 7 รุ่น 64 บิต (อาจใช้กับระบบปฏิบัติการรุ่นใหม่อื่น ๆ ด้วยเช่นกัน แต่ฉันสามารถยืนยันสิ่งนี้สำหรับ Win 7 64 บิต) มีความแตกต่างระหว่างตำแหน่งว่างของ% ProgramFiles% ของคุณ ใน explorer และใน DOS

ภายใต้ Windows 7 สถานที่จริงทางกายภาพของโฟลเดอร์% ProgramFiles% (และที่เกี่ยวข้อง ProgramFiles% (x86)% environemnt ตัวแปร) จะคงที่ต่อฉบับภาษาอังกฤษ ; เช่น "C: \ Program Files" และ "C: \ Program Files (x86)" respectivley แต่จะแสดงในโปรแกรมที่มีการแปลเป็นภาษาท้องถิ่นตามความเหมาะสม

เพื่อให้ตัวอย่างที่เฉพาะเจาะจง; ในการติดตั้ง Windows 7 แบบ 64 บิตของสวีเดนถ้าคุณเปิด Explorer และดูในไดรฟ์ระบบ (โดยทั่วไปคือ C :) คุณจะเห็นโฟลเดอร์" Program " และ " Program (x86) " การพิมพ์% ProgramFiles% ลงในแถบที่อยู่จะนำคุณเข้าสู่ "C: \ Program"

อย่างไรก็ตามถ้าคุณเปิดกล่อง DOS และพิมพ์ SET คุณจะเห็นว่ามูลค่าที่แท้จริงของ% ProgramFiles% คือ "C: \ Program Files" ไม่ใช่ "C: \ Program" โปรแกรมโกงโฟลเดอร์จะแสดงให้คุณเห็น สำรวจเพิ่มเติมด้วย CD และ DIR คุณสามารถดูได้ทางกายภาพคือ "C: \ Program Files"

คุณธรรมคือถ้าคุณใช้ varaibles สภาพแวดล้อมหรือโปรแกรมผ่านทุกอย่างของ API จะยังคงทำงานได้ แต่ระวังการเปลี่ยนแปลงเล็กน้อยเมื่อสำรวจระบบไฟล์!


ในเวอร์ชันโปแลนด์“ Program Files (x86)” คือ“ Pliki programów (x86)” ในขณะที่“ Program Files” คือดี…“ Program Files” โปแลนด์มีไวยากรณ์แปลก ๆ นอกจากนี้โปรดอย่าเรียกว่ากล่อง DOS ไม่มี DOS อยู่ที่นั่น
kinokijuf
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.