ขยาย x86 .exe เป็น 'C:\Windows\System32' ภายใต้ทั้ง Windows x86 และ x64

ฉันต้องการให้โปรแกรมติดตั้งของฉันใช้งานได้ทั้งบนหน้าต่าง x86/x64 ซึ่งหมายความว่าพกพาได้

ฉันติดตั้ง innosetup เพื่อขยายไฟล์ปฏิบัติการ x86 CLI เท่านั้น และฉันต้องขยายเป็นไดเรกทอรี C:\windows\system32 ด้วยซ้ำ หากตัวติดตั้งทำงานภายใต้ Windows x64 เพราะไม่เช่นนั้นหากฉันขยายไปยังไดเร็กทอรี C:\Windows\Syswow64 แสดงว่า exe ไม่ได้รับการยอมรับภายใต้ Windows x64 ซีเอ็มดี.

ดังนั้นฉันควรตั้งค่าคุณสมบัตินี้เพื่อให้พกพาได้ตามเงื่อนไขที่ระบุข้างต้นอย่างไร:

ArchitecturesInstallIn64BitMode= ???

และฉันควรใช้แฟล็กใดเมื่อขยายไฟล์ที่นี่:

Source: {sys}\My_x86_application.exe; DestDir: {sys}; Flags: ??? 

ฉันเคยเล่นมาบ้างเล็กน้อยกับแฟล็กบางตัว เช่น 32Bit, 64Bit และ Is64BitInstallMode แต่ฉันไม่สามารถได้ผลลัพธ์ตามที่คาดหวัง เพราะถ้าฉันรู้ว่าค่าคงที่ที่ถูกจำกัดเป็น {syswow64} จะทำให้เกิดข้อผิดพลาดในการติดตั้งภายใต้ Windows x86...

อัปเดต

นี่เป็นส่วนที่เกี่ยวข้องของสคริปต์การติดตั้งของฉัน แต่มันผิด มันควรจะเข้ากันได้กับ windows x86 และ x64 (พกพา) และขยายเฉพาะไฟล์ Source: {sys}\* เป็น C:\Windows\System32 ใต้ทั้งสองหน้าต่าง (ใช้ค่าคงที่ {sys} เพื่อตรวจจับเส้นทาง dir แน่นอน)

[Setup]
DefaultDirName={pf32}\{#AppName}
ArchitecturesAllowed=x86 x64
ArchitecturesInstallIn64BitMode=x64

[Files]
Source: {app}\*; DestDir: {app}; Flags: ignoreversion
Source: {sys}\*; DestDir: {sys}; Flags: ignoreversion 64bit

person ElektroStudios    schedule 24.11.2014    source แหล่งที่มา
comment
แต่... ทำไมฉันถึงได้รับคะแนนโหวตสองครั้ง ฉันคิดว่าคำถามของฉันมีโครงสร้างที่ดีและมีข้อมูลที่จำเป็นทั้งหมดสำหรับผู้ช่วยเหลือ เกลียดโดยไม่มีเหตุผล...   -  person ElektroStudios    schedule 24.11.2014
comment
คุณแน่ใจหรือไม่ว่าต้องการติดตั้งแอปพลิเคชัน 32 บิตลงในโฟลเดอร์ระบบ 64 บิต ฉันเห็นว่าพรอมต์คำสั่ง 64 บิตไม่สามารถมองเห็นได้ แต่นั่นคือสิ่งที่ใช้ 32 บิต [อย่ารับ downvotes ด้วย ++]   -  person TLama    schedule 25.11.2014
comment
ใช่ @TLama ฉันแน่ใจอย่างยิ่งว่าฉันต้องการทำอะไรเพราะเหตุผลสองประการ: 1) อย่างที่คุณทราบ System32 และ SysWow64 เช่น Program Files(x86) และ Program Files เป็นสิ่งที่ต้องติดตั้งอย่างเหมาะสมและแยกแยะสถาปัตยกรรมที่แตกต่างกันของแอปเดียวกัน แต่เนื่องจากแอปของฉันคือ เพียง x86 เท่านั้น (ฉันไม่มีแอปเดียวกันกับ x64) ฉันไม่สามารถประสบปัญหาใด ๆ ในการติดตั้งใน System32 dir ได้ ดังนั้นฉันไม่ควรกังวลว่าไดเรกทอรีทั้งสองที่ฉันเลือกติดตั้ง exe อยู่ที่ใด แต่ที่นี่มาถึงแล้ว ปัญหา 2)   -  person ElektroStudios    schedule 25.11.2014
comment
2) CMD ไม่รู้จัก exe ถ้าฉันติดตั้งมันลงใน Syswow64 (ตัวแปรสภาพแวดล้อม PATH ของฉันถูกต้องตามค่าเริ่มต้น) ฉันแค่ต้องติดตั้งมันใน System32 dir ขอบคุณสำหรับความคิดเห็นและขออภัยสำหรับภาษาอังกฤษของฉัน   -  person ElektroStudios    schedule 25.11.2014
comment
มีไฟล์ปฏิบัติการ 32 บิตจำนวนมากใน syswow64 และใช้งานได้   -  person Sertac Akyuz    schedule 27.11.2014
comment
@Sertac Akyuz จริง แต่ไม่ใช่สิ่งนี้: sourceforge.net/projects/mp3gain/files/mp3gain/1.5.2/   -  person ElektroStudios    schedule 27.11.2014
comment
@Elektro - ฉันไม่เห็นอะไรพิเศษเกี่ยวกับมัน ฉันมี mp3gain เพิ่งลองและมันก็รันจาก syswow64 ไม่ว่าจะจาก 32 บิต cmd หรือจาก 64 บิต cmd ฉันไม่รู้ว่าทำไมคุณถึงต้องการใส่มันไว้ในโฟลเดอร์ระบบ ฉันหมายถึงโฟลเดอร์ระบบ ไม่ใช่ไฟล์ระบบ   -  person Sertac Akyuz    schedule 27.11.2014
comment
@Sertac Akyuz เพื่อประหยัดเวลาและทำงานบางอย่างภายใต้ CMD โดยอัตโนมัติ ถ้าฉันเพิ่ม mp3gain.exe ลงใน System32 ฉันจะหลีกเลี่ยงการขยาย mp3gain.exe ไปยังตำแหน่งอื่น จากนั้นอัปเดต PATH สภาพแวดล้อม var มันเป็นเพียงการติดตั้งที่สะอาดยิ่งขึ้น mp3gain.exe ใช้งานไม่ได้สำหรับฉันในโฟลเดอร์ SysWow64 หากฉันพยายามโทรจาก CMD ฉันใช้งาน Windows 8.1 x64   -  person ElektroStudios    schedule 27.11.2014
comment
@Elektro - คุณไม่จำเป็นต้องยุ่งกับตัวแปรเส้นทางของระบบ สิ่งที่คุณต้องทำคือเพิ่มรายการรีจิสทรีใน เส้นทางแอป ... นี่คือสิ่งที่เกิดขึ้นหากคุณถามถึงวิธีแก้ปัญหาของคุณแทนที่จะถามถึงปัญหาของคุณ วิธีแก้ปัญหาของคุณผิด การทำให้ได้ผลจะไม่ทำให้ถูกต้อง คุณควรถามว่าต้องทำอย่างไรเพื่อให้สามารถรันโปรแกรมจากพรอมต์คำสั่งโดยไม่ต้องป้อนเส้นทางแบบเต็ม   -  person Sertac Akyuz    schedule 27.11.2014
comment
@Sertac Akyuz โอ้โห! ดูเหมือนว่าจะมีประโยชน์มาก เมื่อใช้งาน Windows มาเป็นเวลา 10 ปี และฉันก็ไม่รู้เรื่องภายใน ดังนั้นฉันจึงคาดเดาสิ่งต่าง ๆ เมื่อถาม แต่นี่คือสิ่งที่ฉันต้องการจริงๆ สำหรับความตั้งใจของฉันใช่ไหม ฉันได้เพิ่มค่า reg นี้แล้ว แต่เมื่อฉันเข้าสู่ CMD และเขียน app.exe แอปจะไม่เป็นที่รู้จัก...: [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\app.exe] @="C:\\app.exe" หากใช้งานได้จริงและฉันพลาดไป บางสิ่งบางอย่างโปรดเขียนคำตอบหากงานนี้ฉันจะทำเครื่องหมายว่ายอมรับ ขอบคุณสำหรับความช่วยเหลือของคุณ   -  person ElektroStudios    schedule 27.11.2014
comment
@Elektro - ดูเหมือนจะไม่ทำงานโดยตรงจากพรอมต์คำสั่ง สงสัยว่าทำไม... หากคุณสามารถใช้ start แม้ว่าดูเหมือนว่าจะไม่เป็นไร   -  person Sertac Akyuz    schedule 27.11.2014
comment
@Sertac Akyuz โปรดดูสิ่งนี้: stackoverflow.com/questions/27179818/   -  person ElektroStudios    schedule 28.11.2014
comment
@Elektro - ตกลงแล้ว คำถามที่ดี IMO   -  person Sertac Akyuz    schedule 28.11.2014


คำตอบ (1)


ตอบในส่วนต่างๆ เช่น คำถามของคุณ:

  1. ArchitecturesInstallIn64BitMode

    ค่าที่ถูกต้อง: ค่าใดค่าหนึ่งต่อไปนี้ คั่นด้วยช่องว่าง:

    • x64
    • ia64

ค่าเริ่มต้น: (ว่าง)

คำอธิบาย: ระบุสถาปัตยกรรมตัวประมวลผล 64 บิตที่โปรแกรมติดตั้งควรติดตั้งในโหมด 64 บิต หากไม่ได้ระบุคำสั่งนี้หรือเว้นว่างไว้ โปรแกรมติดตั้งจะติดตั้งในโหมด 32 บิตเสมอ โดยปกติ คุณไม่ควรเปลี่ยนคำสั่งนี้จากค่าเริ่มต้น เว้นแต่แอปพลิเคชันของคุณจะมีไบนารี 64 บิตดั้งเดิม

คุณมีไบนารี exe x86 ดังนั้นให้เว้นช่อง ว่าง

  1. Source (จำเป็น)

คำอธิบาย: ชื่อของไฟล์ต้นฉบับ คอมไพลเลอร์จะเติมเส้นทางของไดเร็กทอรีต้นทางของการติดตั้งของคุณ หากคุณไม่ได้ระบุชื่อพาธแบบเต็ม

ตัวอย่าง:

Source: "My_x86_application.EXE"

การปล่อยทิ้งไว้โดยไม่มีเส้นทางเหมือนรายการด้านบนอาจเหมาะสมที่สุด (สำหรับโปรเจ็กต์ขนาดเล็ก เนื่องจากจะทำให้ไฟล์ที่จะปรับใช้กับสคริปต์การตั้งค่ายุ่งเหยิง) นอกจากนี้ โปรดระวังว่า ค่าคงที่สามารถใช้ได้เฉพาะเมื่อมีการระบุ external แฟล็ก เนื่องจากคอมไพลเลอร์ไม่ได้แปลตัวเองอย่างต่อเนื่อง ดังนั้น รายการต่อไปนี้:

Source: {sys}\My_x86_application.exe; DestDir: {sys}

จริงๆ แล้วคาดว่าจะมีไบนารีจัดเก็บไว้ในโฟลเดอร์ย่อย {sys} ของไดเร็กทอรีที่มีสคริปต์การตั้งค่า หากไม่เป็นเช่นนั้น การรวบรวมจะล้มเหลว

  1. DestDir (จำเป็น)

ฉันคิดว่าคุณสามารถระบุ System32 โดยใช้ {win}\System32 เสมอได้ เนื่องจาก Windows ทั้งเวอร์ชัน x86 และ x64 มีไดเรกทอรี System32

  1. สำหรับ Flags และคำชี้แจงข้อสงสัยเพิ่มเติม โปรดไปที่หน้านี้

แก้ไข: บันทึกไฟล์ iss ในโฟลเดอร์เดียวกับที่มีไบนารี x86 exe ของคุณอยู่ จากนั้น เรียกใช้ มัน

person Anirban Sarkar    schedule 26.11.2014
comment
You should have gone there in the first place. It's just one google search ("inno setup") away. All sentences in italics are an exact copy from there. ฉันรู้แฟล็กและค่าอื่น ๆ ที่คุณกล่าวถึงแล้ว ฉันรู้ (ส่วนใหญ่) คำอธิบาย/รายละเอียดของแต่ละแฟล็ก แต่ Google ไม่ได้บอกว่าจะรวมแฟล็กและค่าเหล่านี้อย่างไรในสถานการณ์เฉพาะนี้ - person ElektroStudios; 26.11.2014
comment
@ElektroStudios คุณได้ลองเรียกใช้การตั้งค่าแล้วหรือยัง? ปล่อยให้การตั้งค่าสถานะเป็นค่าเริ่มต้นต่อไป เนื่องจากเป็น DestDir คุณจึงประสบปัญหา - person Anirban Sarkar; 26.11.2014
comment
@Anirban คำตอบนี้คืออะไร ? คุณเพิ่งคัดลอก/วางข้อความที่ตัดตอนมาจากเอกสารประกอบและคุณกำลังคาดเดาว่ามันทำอะไร บันทึกสุดท้ายของคุณ คุณควรไปที่นั่นตั้งแต่แรก การค้นหาโดย Google เพียงครั้งเดียว (การตั้งค่า inno) นั้นหยาบคายในมุมมองของฉัน และบันทึกย่อของคุณ คุณได้ลองเรียกใช้การตั้งค่าแล้วหรือยัง มีประโยชน์สำหรับอะไร ? ถ้าวิ่งได้ก็โอเคหรือป่าว? คุณควรเข้าใจสิ่งที่คุณกำลังทำอยู่เสมอ... - person TLama; 27.11.2014
comment
@Tlama อย่างที่คุณเห็นในความคิดเห็นก่อนหน้าของคุณ ถ้า ElectroStudios รู้ทุกอย่างเกี่ยวกับธงตั้งแต่แรก ก็ไม่มีอะไรเหลือนอกจากคำอธิบาย ฉันยังได้โพสต์คำตอบสำหรับคำถามเฉพาะที่อนุมานได้จากเอกสารประกอบด้วย สุดท้ายนี้ การขอให้ผู้ใช้ลองใช้วิธีแก้ปัญหานั้นผิดหรือไม่ - person Anirban Sarkar; 27.11.2014
comment
@Anirban แล้วทำไมคุณถึงปรึกษา Source พารามิเตอร์เช่น? มันเกี่ยวข้องกับปัญหาที่ถามที่นี่อย่างไร ยิ่งไปกว่านั้น คุณบอกว่า ปล่อยไว้ไม่เปลี่ยนแปลง โดยไม่มีค่าคงที่เหมือนตัวอย่างข้างต้นจะเหมาะสมที่สุด เนื่องจากค่าคงที่สามารถใช้ได้เมื่อมีการระบุแฟล็กภายนอกเท่านั้น เนื่องจากคอมไพลเลอร์ไม่ได้แปลตัวเองอย่างต่อเนื่อง ในสิ่งที่ มัน ดีที่สุด หรือเปล่า? - person TLama; 27.11.2014
comment
@Tlama ตัวติดตั้งจะถือว่าเส้นทางจากตำแหน่งที่รันอยู่ ดังนั้นจึงเป็นการดีกว่าถ้าปล่อยฟิลด์ที่ไม่มีค่าคงที่เหมือนกับที่ {sys} ระบุไว้ในคำถาม - person Anirban Sarkar; 27.11.2014
comment
@อนิรบาน เรื่องไร้สาระ พารามิเตอร์ Source คือแหล่งที่มาของไฟล์ซึ่งใช้ในการคอมไพล์ (เว้นแต่คุณจะระบุแฟล็ก external) มันไม่เกี่ยวอะไรกับระบบที่จะรันการตั้งค่า และไม่เกี่ยวอะไรกับคำถามเลย คุณสามารถอ่านได้ในเอกสารประกอบหากคุณพูดถึงมัน - person TLama; 27.11.2014
comment
@Tlama เพื่อให้ไฟล์ติดตั้งคอมไพล์ในโฟลเดอร์อื่นที่ไม่ใช่ %SystemRoot%\System32 (ฉันไม่รู้ว่าแหล่งที่มาของ exe อยู่ที่ไหน ดังนั้นฉันคิดว่ามันจะอยู่ที่อื่นที่ไม่ใช่ System32) Run หมายถึงการทำงานในเวลาคอมไพล์ (คอมไพเลอร์รันสคริปต์) ดำเนินการคอมไพเลอร์การตั้งค่า Inno เพื่อค้นหา ฉันคิดว่า ElektroStudios น่าจะชัดเจน - person Anirban Sarkar; 27.11.2014
comment
@Anirban ไม่ขอโทษฉันจะไม่รันคอมไพเลอร์ :) อย่างไรก็ตาม เหตุใดจึงต้องคอมไพล์การตั้งค่าในโฟลเดอร์ระบบ หรือคัดลอกไปที่นั่นในฐานะผู้ใช้? ถึงกระนั้น พารามิเตอร์ Source ยังถูกใช้ในเวลารวบรวม (ในกรณีนี้) คำถามนี้เกี่ยวกับรันไทม์ - person TLama; 27.11.2014
comment
@Tlama คำถามแรกของคุณคือสาเหตุที่ฉันป้องกันไม่ให้ ElektroStudios ใช้ {sys} ใน Source ตั้งแต่แรก (ดูคำถาม) อันที่สองคือเอาต์พุตที่ ElektroStudios คาดหวัง อย่างไรก็ตาม DestDir ถูกสร้างขึ้นที่รันไทม์ของตัวติดตั้งที่คอมไพล์แล้ว ดังนั้นคำถามจึงเกี่ยวกับทั้งเวลาคอมไพล์และรันไทม์ - person Anirban Sarkar; 27.11.2014
comment
@Anirban โอเค ดังนั้นในลักษณะใด ดีที่สุด ที่คุณพูด ? เป็นการดีที่สุดหรือไม่ที่สคริปต์จะคอมไพล์ (เนื่องจากมันจะล้มเหลวหากมีใครใช้ค่าคงที่ตรงนั้น) - person TLama; 28.11.2014
comment
@Tlama การจัดไฟล์ ฉันเชื่อว่าควรเก็บไฟล์ของโปรเจ็กต์เดียวกันไว้ในโฟลเดอร์เดียวกัน ดีกว่าเก็บไว้ในโฟลเดอร์ Windows และสคริปต์ไม่ได้ล้มเหลวในการคอมไพล์ เพียงคาดหวังว่าจะมี exe ไบนารี่อยู่ในโฟลเดอร์ Windows (ซึ่งไม่มีตั้งแต่แรก แต่มีโฟลเดอร์อื่นบางโฟลเดอร์ - ดูการแก้ไข) เมื่อไฟล์ iss ถูกเรียกใช้จากโฟลเดอร์เดียวกัน โฟลเดอร์เป็น exe Source คาดว่าจะพบ exe ที่นั่น และเนื่องจากมี exe อยู่แล้ว จึงใช้งานได้! - person Anirban Sarkar; 08.12.2014
comment
@Anirban เว้นแต่ว่าคุณใช้แฟล็ก external ค่าคงที่ {sys} จะไม่ขยายไปยังโฟลเดอร์ระบบ Windows เมื่อใช้ในพารามิเตอร์ Source (มันจะเป็นโฟลเดอร์ชื่อ {sys} ที่เป็นโฟลเดอร์ย่อยของโฟลเดอร์ที่มีสคริปต์ของคุณ) ดังนั้นสำหรับคำถามความคิดเห็นของฉัน ฉันคาดหวังคำตอบเช่นนี้ เป็นการดีที่สุดเพราะคุณไม่จำเป็นต้องมี {sys} โฟลเดอร์ย่อย (ของโฟลเดอร์ที่มีสคริปต์ของคุณ) พร้อมกับไฟล์ที่ปรับใช้ของคุณ ช่างเถอะ. เสร็จแล้วค่ะ ;-) - person TLama; 12.12.2014
comment
@Tlama ทำไมคุณถึงใช้ค่าคงที่เป็นอย่างอื่น แม้ว่าฉันจะใช้สถานการณ์ของคุณกับใครก็ตามที่ไม่ได้ตั้งค่าสถานะ external และช้าไปหน่อย แต่ได้รับคำแนะนำแล้ว แก้ไขใหม่เกินมาตรฐาน - person Anirban Sarkar; 26.12.2014
comment
@Anirban ฉันไม่ได้รับความคิดเห็นล่าสุดของคุณ แต่ขอย้ำอีกครั้งว่าไม่มีอะไรที่เหมาะสมที่สุดหากไม่ใช้ค่าคงที่ใน Source พารามิเตอร์ พวกเขาจะไม่ขยายตราบใดที่คุณใช้แฟล็ก external หากคุณใช้ {sys} ในพาธต้นทาง แสดงว่าคุณมีโฟลเดอร์ย่อย {sys} ในไดเร็กทอรีการปรับใช้ของคุณ หรือการคอมไพล์ล้มเหลว และหากคุณจริงจังกับการปรับใช้ คุณจะแยกสคริปต์การปรับใช้ออกจากไฟล์ที่จะปรับใช้ ดังนั้น การไม่ใช้โครงสร้างโฟลเดอร์ใดๆ จึง เหมาะสมที่สุด เช่นกัน แต่ขอบคุณสำหรับการอัปเดต! ประโยคเช่น คุณสามารถ Google ได้ อาจถูกมองว่าหยาบคาย - person TLama; 26.12.2014
comment
@Tlama มันไม่ได้พูดถึงการเหมาะสมที่สุด แต่ไม่ได้ใช้ค่าคงที่โดยไม่ขยายมันค่อนข้างจะเอาชนะวัตถุประสงค์ของการใช้มันตั้งแต่แรกใช่ไหม และใช่การพิมพ์ผิดเล็กน้อยในครั้งก่อน... - person Anirban Sarkar; 27.12.2014