เหตุใด Windows Installers (ไฟล์. msi) จึงใช้เวลาในการถอนการติดตั้งนานกว่าตัวติดตั้งอื่น ๆ


31

นับตั้งแต่ Windows XP วันนี้ตัวติดตั้ง Windows (ไฟล์. msi) รวมถึงตัวติดตั้ง InstallShield (ซึ่งเป็นเพียง bootstrap สำหรับ MSI) ใช้เวลานานกว่าการติดตั้งแอพพลิเคชั่นมากกว่าตัวติดตั้งอื่นถึงห้าเท่า เดียวกันยังเป็นมักจะจริงเกี่ยวกับการติดตั้ง

ทำไมพวกเขาถึงใช้เวลานานและทำไมคนยังใช้ MSI ในการติดตั้ง ตัวอย่างเช่น:

ถอนการติดตั้ง VLC - ใช้เวลาประมาณ 5 วินาที
ถอนการติดตั้ง XYZ - เปิดตัว "กำลังเตรียมที่จะลบ ... " ตามด้วยความล่าช้า 15 วินาที

สิ่งที่มันทำคือการลบไฟล์และทำความสะอาดรีจิสทรี (ซึ่งอาจรวมถึงการลงทะเบียน COM) ดังนั้นทำไมมันใช้เวลานานมาก?


ฉันแค่ต้องการทราบว่านี่เป็นจริงเฉพาะเมื่อคุณ (1) ปิดการใช้งานคุณลักษณะจุดตรวจสอบการคืนค่าระบบและ (2) เป็นตัวติดตั้งขนาดมหึมา เพียงเพราะพวกมันใหญ่) ฉันมีตัวติดตั้ง Windows ติดตั้งและลบตัวเองในไม่กี่วินาที (ตัวอย่างเช่น Bootvis ติดตั้งใน 3 วินาทีในระบบของฉันมันถอนการติดตั้งในระยะเวลาเท่ากันและไม่ระบบของฉันก็ไม่สว่างอย่างเห็นได้ชัด) ความแตกต่างก็คือว่า Windows Installer มีคุณสมบัติมากมาย ใช้บ่อยขึ้น
Mehrdad

@Mehrdad คุณหมายถึง (1) เปิดใช้งานการกู้คืนระบบหรือไม่
Chris S

ใช่แน่นอนพิมพ์ผิด
Mehrdad

2
ฉันมาที่นี่เพราะการถอนการติดตั้งของ MSI ใช้เวลาตลอดไป ... และที่จริงแล้วสาเหตุที่ป๊อปอัปDo you want to allow the following program from an unknown publisher to make changes to this computer?ซ่อนอยู่ในพื้นหลัง
Nicolas Raoul

ดูคำตอบนี้สำหรับรายละเอียดทางเทคนิคสำหรับการเร่งการติดตั้ง MSI: superuser.com/a/296534/11906
Stein Åsmul

คำตอบ:


32

ตัวติดตั้ง Windows จะสร้างจุดคืนค่าระบบอย่างเป็นระบบซึ่งเป็นการดำเนินการที่ค่อนข้างช้า

นอกจากนี้จากบทความที่ได้รับอย่างเหมาะสม"Windows Installer sucks"ข้อความที่ตัดตอนมา:

เคยเป็นว่าการติดตั้งจะประกอบด้วยโปรแกรมที่ดำเนินการและทำตามขั้นตอนง่าย ๆ ในการติดตั้งซอฟต์แวร์ของคุณจากนั้นทำการถอนการติดตั้ง

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

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

ฉันยังเพิ่มว่าตัวติดตั้ง Windows จะเก็บข้อมูลทั้งหมดไว้ในรีจิสทรีซึ่งไม่ใช่ฐานข้อมูลที่เร็วที่สุดในโลก


3
อาจเร็วกว่าที่dpkgใช้สำหรับฐานข้อมูลแพ็กเกจ (แม้ว่าเป็นที่ยอมรับว่า dpkg ไม่ได้จัดเก็บทุกอย่างไว้ในนั้น): /var/lib/dpkg/statusเป็นไฟล์ข้อความแบบแบนซึ่งแสดงรายการทุกแพ็คเกจเดียวที่ติดตั้งครั้งเดียวและยังไม่ถูกกำจัด - และฉัน ไม่แน่ใจด้วยซ้ำ
SamB

3
dpkgไม่ได้โกหกฉันกับแถบความคืบหน้าที่พูดว่า "เวลาที่เหลืออยู่: 0 วินาที" เป็นเวลาสองนาทีแม้ว่า ...
LawrenceC

20

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

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

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

สาเหตุที่การดำเนินการของ MSI อาจช้าลงในรีจิสทรีที่เกี่ยวข้องกับวิธีการที่ MSI ใช้งาน Windows Installer ใช้รีจิสตรีเพื่อติดตามว่ามีผลิตภัณฑ์ใดบ้างที่ติดตั้งคอมโพเนนต์และตำแหน่งที่ติดตั้งไว้ GUID การติดตั้งดั้งเดิมใช้ในรูปแบบที่บีบอัด ข้อมูลต่อเครื่องเกี่ยวกับการติดตั้งสามารถดูได้ที่HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18ในขณะที่ข้อมูลต่อผู้ใช้จะพบถัดจากมันในภายใต้HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\และบนคีย์กับผู้ใช้ SID

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

สรุปแล้ว MSI เป็นวิธีที่ค่อนข้างสมบูรณ์และถูกต้องสำหรับการติดตั้งและถอนการติดตั้งซอฟต์แวร์ แต่มันก็ต้องทนทุกข์ทรมานจากการพึ่งพารีจิสทรี ระบบเป็นเลิศ เป็นรีจิสทรีของ Windows ที่ควรมีการปรับปรุงใหม่นานแล้ว :)

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


4
นอกจากนี้เท่าที่ฉันรู้ MSI ใช้ธุรกรรมสำหรับทุกสิ่งที่ทำเพื่อให้สามารถย้อนกลับได้อย่างเหมาะสมทุกครั้งที่การดำเนินการล้มเหลว สิ่งนี้อาจไม่ได้ช่วยเพิ่มความเร็ว แต่ค่อนข้างจำเป็นสำหรับความถูกต้องของข้อมูล (ฉันหยุดนับว่าฉันต้องล้างข้อมูลบ่อยแค่ไหนหลังจากตัวติดตั้ง NSIS ล้มเหลว --.-)
Joey

ตอนนี้ฉันกำลังติดตั้ง OpenOffice และมันใช้เวลาเกือบชั่วโมงแล้ว)
Quiark

ข้อมูลมาก ฉันคนหนึ่งดูเหมือนจะได้รับข้อผิดพลาด "ไม่สามารถสร้างจุดคืนค่าได้" บ่อยครั้ง (อาจจะถึงจุดคืนค่าอ้างถึง?) ในบันทึก msi ของฉันดังนั้นการสร้างจุดคืนค่าจึงไม่ได้มีโอกาสขัดขวางเวลาติดตั้งของฉัน ไม่ว่าเวลาติดตั้งของฉันจะยังช้าและถ้าการค้นหาค่าช้าตามที่คุณพูดฉันคิดว่าไม่มีเหตุผลใด ๆ ในส่วนของ Microsoft เพื่อให้การใช้งานเพิ่มเติมสำหรับข้อมูล leaf / node เพิ่มเติมในข้อมูลจำเพาะไบนารีของรีจิสทรีเพื่อ เสริมการค้นหาแบบไบนารี
chaz

> แต่ท้ายที่สุดแล้วเราควรถามตัวเองว่าหนึ่งสองหรือสามนาทีเป็นเรื่องของความขัดแย้งเมื่อทำการติดตั้งและถอนการติดตั้งซอฟต์แวร์หรือไม่ ใช่.
Alexei Averchenko

6

ตัวติดตั้ง Windows มีข้อได้เปรียบที่ยิ่งใหญ่มากมายสำหรับการปรับใช้ระดับองค์กรซึ่งบางส่วนได้อธิบายไว้ที่นี่: https://serverfault.com/a/274609/20599

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

อีกหนึ่งปัจจัยที่เอื้อคือส่วนประกอบทั้งหมดใน MSI จะได้รับการจดทะเบียนในรีจิสทรี เรื่องนี้เกี่ยวข้องกับค่าใช้จ่ายบางส่วน

สำหรับไฟล์ MSI ที่รวบรวมก็จำเป็นต้องใช้เวลาในการแตกไฟล์ติดตั้งด้วย

ดูคำตอบนี้สำหรับรายละเอียดทางเทคนิคสำหรับการเร่งขึ้นการติดตั้งของ MSI


3

Windows Installersใช้กันอย่างแพร่หลายด้วยเหตุผลหลายประการเช่นการรวมระบบปฏิบัติการนโยบายความปลอดภัยการติดตั้งแบบไม่ต้องใส่ข้อมูลและอื่น ๆ อีกมากมาย

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

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

และเพื่อให้คุณรู้ - InstallShield ไม่ได้เป็นส่วนหน้าของไฟล์ MSI เสมอไป พวกเขายังมีโซลูชันการติดตั้งของตนเอง


1
คำถามคือทำไม MSI ถึงใช้เวลานานกว่าจะทำอะไรเทียบกับโปรแกรมติดตั้ง. exe
grawity

5
จากคำถาม ... "และทำไมคนยังใช้ MSI ในการติดตั้ง"
Breakthrough

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