เหตุใด Windows Installer จึงสามารถติดตั้งได้ครั้งละหนึ่งโปรแกรมเท่านั้น


10

ฉันสงสัยอยู่เสมอว่าทำไม Windows Installer อนุญาตให้คุณติดตั้งเพียงโปรแกรมเดียวในแต่ละครั้ง เป็นเรื่องน่าผิดหวังอย่างยิ่งที่ไม่สามารถเปิดใช้การติดตั้งหลาย ๆ แบบได้โดยเฉพาะเมื่อติดตั้ง Windows ใหม่ อะไรคือเหตุผลสำหรับสิ่งนั้น?

คำตอบ:


6

มันจะซับซ้อนมากในการรับประกันความถูกต้องเมื่อมีการติดตั้งพร้อมกันสมมติว่าพวกเขาแชร์ไฟล์บางไฟล์ นี่จะต้องมีรูปแบบของการทำธุรกรรมบางอย่าง

  • คุณต้องล็อคไฟล์
  • เป็นไปได้ไหมที่จะยกเลิกการเปลี่ยนแปลงระดับกลางหากการติดตั้งล้มเหลว (ไม่แน่ใจว่าเป็นไปได้หรือไม่)

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

หากคุณล็อคไฟล์ที่จำเป็นทั้งหมดไว้ล่วงหน้าคุณจะได้สิ่งที่มี: โปรแกรมติดตั้งตัวหนึ่งจะต้องรอจนกว่าไฟล์อื่นจะเสร็จสิ้น หากคุณไม่ล็อคไฟล์ที่จำเป็นทั้งหมดไว้ล่วงหน้าและดำเนินต่อไปคุณจะเสี่ยงว่า "การทำธุรกรรม" จะล้มเหลว นั่นหมายถึงว่าหนึ่งในตัวติดตั้งจะต้องเริ่มต้นใหม่

จากนั้นคุณอาจต้องคิดถึงระดับการแยกธุรกรรม - เพื่อให้ถูกต้องอย่างสมบูรณ์ธุรกรรมของคุณจะต้องเป็น"serializable" - แต่นั่นไม่ใช่เรื่องง่ายแม้แต่กับฐานข้อมูลจำนวนมาก

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

ฉันเชื่อว่าด้วยการติดตั้งพร้อมกันเราจะมีปัญหามากขึ้นหลังการติดตั้งยาก - โดยเฉพาะอย่างยิ่งเพราะฉันไม่คิดว่าผู้ขายระบบปฏิบัติการ (หรือการกระจาย) จะผ่านปัญหาทั้งหมดเพื่อให้สะอาด 100% ดังนั้นฉันไม่ต้องการใช้มันแม้ว่าจะถูกเสนอโดยระบบปฏิบัติการก็ตาม

บันทึก

แต่บางทีสิ่งที่คุณต้องการจริงๆคือไม่ได้ติดตั้ง "ในเวลาเดียวกัน" อาจจะเพียงพอถ้าคุณสามารถจัดคิวการติดตั้งซึ่งจะดำเนินการหนึ่งหลังจากที่อื่น ๆ (นึกคิดโดยไม่ต้องถามคำถามใด ๆ ในระหว่าง) และนั่นคือสิ่งที่จริง ๆ ระบบปฏิบัติการอื่น (การกระจาย) จัดการได้ดีกว่ามาก


1
ในขณะที่ถูกต้องคำตอบนี้ดูเหมือนว่าฉันจะ verbose เกินไป มีคนถามว่าเหตุใดบริการติดตั้งทำงานในลักษณะที่ไม่น่าจะเข้าใจคำตอบนี้
gWaldo

2
@gWaldo: โอเคบางทีคุณพูดถูก ... อีกครั้งฉันไม่อยากพูดว่า "มันซับซ้อนเชื่อฉัน (จุด) คุณไม่เข้าใจหรอก" บางที OP (หรือคนอื่นสะดุดกับคำถามนี้) เป็นที่สนใจอย่างแท้จริงและคำตอบที่ได้รับไปที่ด้านล่างของปัญหาที่จะช่วยให้เขาเพื่อประเมินถ้ามีจริงๆเป็นจำนวนมากของความซับซ้อนที่เกี่ยวข้องกับการแก้สิ่งที่มีลักษณะเพื่อให้ง่ายในตัวของมัน พื้นผิว ใครจะรู้?
Chris Lercher

จริงแท้แน่นอน. นั่นเป็นจุดที่ดี
gWaldo

ในขณะที่การพูดคุยเกี่ยวกับการแยกเสียงเป็นไปได้คุณสามารถเรียกใช้ตัวติดตั้งหลายตัวหากไม่ได้ใช้กรอบงานตัวติดตั้ง Windows ฉันไม่เคยหยุดพักเมื่อทำงานเคียงข้างกัน ... บางทีฉันก็โชคดี :) สำหรับการติดตั้งเข้าคิวมีเครื่องมือสำหรับการทำเช่นนั้น แต่ได้รับ CPU แบบมัลติคอร์ (heck, เดสก์ท็อปซีพียูสามารถรัน 8 เธรดได้ ... ) ดูเหมือนว่าการเรียกใช้พวกเขาเคียงข้างกันจะเป็นคำตอบ (แม้ว่าพวกเขายังอาจต่อสู้เพื่อ I / O)
Rytis

2
@Rytis: ฉันหวังว่าฉันจะมีโชคเหมือนกัน :-) - ฉันมีโปรแกรมติดตั้งแตกแบบสุ่มแม้ว่าจะไม่เรียกใช้พร้อมกันก็ตาม เกี่ยวกับมัลติคอร์: จะมีอีกวิธีในการใช้ประโยชน์: โดยใช้หลายคอร์ภายในกระบวนการติดตั้งเดียว นั่นยังคงเป็นไปไม่ได้หรือง่ายเสมอไป แต่สามารถประสานงานได้ดีขึ้นมาก โดยรวมแล้วฉันคิดว่าตัวช่วยประหยัดเวลาที่ยิ่งใหญ่ที่สุดยังคงอยู่หากกระบวนการติดตั้งทั้งหมด (คิว) ถามเฉพาะตอนเริ่มต้นและตอนท้ายเท่านั้น จากนั้นคุณสามารถซื้อกาแฟหรือทำอย่างอื่นในขณะที่การติดตั้งทำงาน (และใช้แกนที่เหลือสำหรับสิ่งที่คุณต้องการทำ)
Chris Lercher

6

นี่คือการออกแบบเพื่อหลีกเลี่ยงการติดตั้งสองครั้งที่จัดการไฟล์ / โฟลเดอร์ / รีจิสตรีคีย์เดียวกัน / ฯลฯ อาจเป็นไปได้ที่จะทำในรูปแบบที่แตกต่างกัน แต่ Microsoft ก็เลือกไว้


มีการอ้างอิงเพื่อสนับสนุนข้อเรียกร้องของคุณหรือไม่?
Aaron Digulla

1

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

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

ที่ระดับ MSI ทางเทคนิคเฉพาะการกระทำระหว่างการกระทำมาตรฐานที่ InstallInitialize และ InstallFinalize ใน InstallExecuteSequence นั้นจะถูกเรียกใช้เป็นธุรกรรม ไม่มีการเปลี่ยนแปลงระบบที่ควรจะเกิดขึ้นนอกเหนือจากการกระทำเหล่านี้ แต่บางครั้งไฟล์ MSI ได้รับการออกแบบมาเพื่อทำการเปลี่ยนแปลงในลำดับอื่น ๆ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.