ฉันสงสัยอยู่เสมอว่าทำไม Windows Installer อนุญาตให้คุณติดตั้งเพียงโปรแกรมเดียวในแต่ละครั้ง เป็นเรื่องน่าผิดหวังอย่างยิ่งที่ไม่สามารถเปิดใช้การติดตั้งหลาย ๆ แบบได้โดยเฉพาะเมื่อติดตั้ง Windows ใหม่ อะไรคือเหตุผลสำหรับสิ่งนั้น?
ฉันสงสัยอยู่เสมอว่าทำไม Windows Installer อนุญาตให้คุณติดตั้งเพียงโปรแกรมเดียวในแต่ละครั้ง เป็นเรื่องน่าผิดหวังอย่างยิ่งที่ไม่สามารถเปิดใช้การติดตั้งหลาย ๆ แบบได้โดยเฉพาะเมื่อติดตั้ง Windows ใหม่ อะไรคือเหตุผลสำหรับสิ่งนั้น?
คำตอบ:
มันจะซับซ้อนมากในการรับประกันความถูกต้องเมื่อมีการติดตั้งพร้อมกันสมมติว่าพวกเขาแชร์ไฟล์บางไฟล์ นี่จะต้องมีรูปแบบของการทำธุรกรรมบางอย่าง
แนวคิดเหล่านี้เป็นที่รู้จักจากฐานข้อมูลทรานแซคชัน - แต่หัวข้อนั้นไม่สำคัญและคุณมักจะไม่พบโครงสร้างพื้นฐานทรานแซคชั่นทั้งหมดในระบบไฟล์ ปัญหาหนึ่งคือการล็อคหลาย ๆ อันสามารถนำไปสู่การหยุดชะงัก - จากนั้นคุณต้องตรวจจับการหยุดชะงัก (หรือผู้ติดตั้งทั้งคู่จะแขวนตลอดไป) และวิธีการจัดการกับปัญหานั้น สามารถหลีกเลี่ยงการหยุดชะงัก (เช่นล็อคไฟล์ตามลำดับเสมอ) แต่มีปัญหาอื่น ๆ :
หากคุณล็อคไฟล์ที่จำเป็นทั้งหมดไว้ล่วงหน้าคุณจะได้สิ่งที่มี: โปรแกรมติดตั้งตัวหนึ่งจะต้องรอจนกว่าไฟล์อื่นจะเสร็จสิ้น หากคุณไม่ล็อคไฟล์ที่จำเป็นทั้งหมดไว้ล่วงหน้าและดำเนินต่อไปคุณจะเสี่ยงว่า "การทำธุรกรรม" จะล้มเหลว นั่นหมายถึงว่าหนึ่งในตัวติดตั้งจะต้องเริ่มต้นใหม่
จากนั้นคุณอาจต้องคิดถึงระดับการแยกธุรกรรม - เพื่อให้ถูกต้องอย่างสมบูรณ์ธุรกรรมของคุณจะต้องเป็น"serializable" - แต่นั่นไม่ใช่เรื่องง่ายแม้แต่กับฐานข้อมูลจำนวนมาก
อาจมีกลยุทธ์ทางเลือกในการจัดการกับปัญหาซึ่งหลีกเลี่ยงการแยกกันโดยสิ้นเชิง แต่โดยทั่วไปแล้วจะยากกว่าที่จะพิสูจน์ความถูกต้องของพวกเขา
ฉันเชื่อว่าด้วยการติดตั้งพร้อมกันเราจะมีปัญหามากขึ้นหลังการติดตั้งยาก - โดยเฉพาะอย่างยิ่งเพราะฉันไม่คิดว่าผู้ขายระบบปฏิบัติการ (หรือการกระจาย) จะผ่านปัญหาทั้งหมดเพื่อให้สะอาด 100% ดังนั้นฉันไม่ต้องการใช้มันแม้ว่าจะถูกเสนอโดยระบบปฏิบัติการก็ตาม
บันทึก
แต่บางทีสิ่งที่คุณต้องการจริงๆคือไม่ได้ติดตั้ง "ในเวลาเดียวกัน" อาจจะเพียงพอถ้าคุณสามารถจัดคิวการติดตั้งซึ่งจะดำเนินการหนึ่งหลังจากที่อื่น ๆ (นึกคิดโดยไม่ต้องถามคำถามใด ๆ ในระหว่าง) และนั่นคือสิ่งที่จริง ๆ ระบบปฏิบัติการอื่น (การกระจาย) จัดการได้ดีกว่ามาก
นี่คือการออกแบบเพื่อหลีกเลี่ยงการติดตั้งสองครั้งที่จัดการไฟล์ / โฟลเดอร์ / รีจิสตรีคีย์เดียวกัน / ฯลฯ อาจเป็นไปได้ที่จะทำในรูปแบบที่แตกต่างกัน แต่ Microsoft ก็เลือกไว้
คุณสามารถเตะไฟล์ MSI หลายไฟล์เพื่อติดตั้งในลำดับที่หนึ่งหลังจากนั้นอย่างรวดเร็วโดยใช้ไฟล์แบตช์ คุณไม่สามารถเรียกใช้ไฟล์ MSI สองไฟล์พร้อมกันในแง่ที่ว่าทั้งคู่เขียนลงดิสก์ในเวลาเดียวกัน
เหตุผลก็คือส่วนหนึ่งของการติดตั้ง MSI นั้นถูกเรียกใช้เป็น "ทรานแซคชัน" - ลำดับของการเปลี่ยนแปลงที่กระทำหรือย้อนกลับขึ้นอยู่กับว่าการกระทำในรายการธุรกรรมเสร็จสมบูรณ์โดยไม่มีข้อผิดพลาดหรือไม่ ทั้งหมดจะต้องดำเนินการให้เสร็จสมบูรณ์โดยไม่มีข้อผิดพลาดจากนั้นจะมีการทำธุรกรรม ตามมาว่ามีเพียงหนึ่งธุรกรรมที่สามารถใช้งานได้ในเวลาใดก็ตาม
ที่ระดับ MSI ทางเทคนิคเฉพาะการกระทำระหว่างการกระทำมาตรฐานที่ InstallInitialize และ InstallFinalize ใน InstallExecuteSequence นั้นจะถูกเรียกใช้เป็นธุรกรรม ไม่มีการเปลี่ยนแปลงระบบที่ควรจะเกิดขึ้นนอกเหนือจากการกระทำเหล่านี้ แต่บางครั้งไฟล์ MSI ได้รับการออกแบบมาเพื่อทำการเปลี่ยนแปลงในลำดับอื่น ๆ