Windows จัดการกับการพึ่งพาของโปรแกรมอย่างไร


23

ฉันใช้ลีนุกซ์มาระยะหนึ่งแล้วและฉันก็สงสัยอยู่เสมอว่า Windows สามารถจัดการการพึ่งพาโปรแกรมเช่นapt-get , aptitude , Pacman , yumและผู้จัดการแพ็คเกจอื่น ๆ ได้อย่างไร บางครั้งผู้จัดการแพคเกจของฉันจะบอกฉันว่าไลบรารีเวอร์ชันนี้จำเป็นสำหรับแพคเกจนี้หรืออาจมีข้อขัดแย้ง

Windows จัดการกับทุกสิ่งได้อย่างไร


2
Windows ไม่จัดการกับการอ้างอิงรุ่น โปรแกรมติดตั้งเวอร์ชันส่วนใหญ่ทำ หากคุณยังไม่คุ้นเคยลองดูที่ InnoSetup: jrsoftware.org/isinfo.php
paulsm4

4
อาจเป็นเรื่องที่น่าสังเกตว่าแม้ในตัวอย่างของคุณมันไม่ใช่Linuxต่อ se ที่จัดการการพึ่งพา - เป็นผู้จัดการแพ็คเกจ
GalacticCowboy

3
Windows จัดการกับการพึ่งพาของโปรแกรมอย่างไร ในประสบการณ์ของฉันไม่ดี
rlms

คำตอบ:


29

มันไม่ได้ นอกจากว่าเรากำลังพูดถึง. NETซึ่งขอให้คุณติดตั้งเฟรมเวิร์กเวอร์ชัน X ตามคอมไพเลอร์

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


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

ลืมที่จะพูดว่าไม่ใช่คุณสามารถใช้โปรแกรมแล้ว แต่คุณต้องเข้าใจว่า DLL หรือเฟรมเวิร์กนั้นต้องการอะไร
Filipe YaBa Polido

9
@Filipe ดังนั้นความจริงที่ว่าคุณต้องติดตั้งรันไทม์V C ++คือเหตุผลที่คุณเกลียดชังซอฟต์แวร์. NET Windows โดยค่าเริ่มต้นแล้วมี. NET Framework ติดตั้งดังนั้นหากคุณกำหนดเป้าหมายรุ่นที่ถูกต้องมันจะทำงานออกจากกล่อง และความจริงที่ว่าคุณต้องดาวน์โหลดและติดตั้งวัตถุที่ใช้ร่วมกันที่ขาดหายไปนั้นไม่ได้ จำกัด อยู่เฉพาะซอฟต์แวร์ / ภาษา / กรอบงานใด ๆ ด้วยเหตุผลที่ชัดเจน (คุณสามารถมี "ปัญหา" เดียวกันใน * ระวังด้วย)
Voo

2
@FilipeYaBaPolido: ความเกลียดชังของคุณถูกใส่ผิดที่อย่างยิ่งเนื่องจาก VC ++ 2008 runtime สำหรับแอปพลิเคชัน C ++ ไม่ใช่แอปพลิเคชัน. Net เห็นได้ชัดว่า. แอปพลิเคชั่น. NET ต้องการแอปพลิเคชั่น. Net และ C ++ ที่ต้องการเฟรมเวิร์ก C ++ (รันไทม์) ซึ่งค่อนข้างง่ายจริงๆ ตอนนี้แพ็คเกจซอฟต์แวร์เฉพาะอาจมีทั้งส่วน C ++ และ. Net ดังนั้นทั้งสองจึงไม่เป็นเอกสิทธิ์
MSalters

2
พวกมันผ่อนคลายฉันไม่ได้เกลียด. Net หรือ VC ++ ฉันยังใช้รหัสใน. Net / C # เมื่อจำเป็นมันเป็นเครื่องมือ แต่ฉันทำงานกับเครื่องมือต่าง ๆ และดูความแตกต่าง ขออภัยถ้าฉันอธิบายผิด
Filipe YaBa Polido

40

แก้ไข 4/4/2014: เฮ้ OP ดูสิ่งที่เพิ่งเปิดตัววันนี้:

http://blogs.technet.com/b/windowsserver/archive/2014/04/03/windows-management-framework-v5-preview.aspx


ฉันแค่อยากจะขยายคำตอบที่ได้รับการยอมรับเล็กน้อยเพราะมันมีรายละเอียดเล็กน้อย คำตอบ Filipe ทำให้การกล่าวถึงกลยุทธ์ไม่ว่า Windows จริงไม่ใช้ในการแก้ไขหรือการพึ่งพาโปรแกรมบรรเทาปัญหาเช่นการจัดเก็บส่วนประกอบ (WinSxS) แคชชุมนุมทั่วโลกระบบ MSI ฯลฯ แต่ในทางกลับกันเขาเป็นพื้นที่เหมาะสมใน รู้สึกว่าเป็นความรับผิดชอบของนักพัฒนาในการรวมไลบรารีที่กำหนดเองใด ๆ เข้ากับแอพและตรวจสอบการมีอยู่ของการอ้างอิงก่อนที่จะทำธุรกรรมการติดตั้ง

Windows เป็นมอดุลาร์น้อยกว่า Linux ซึ่งมีทั้งข้อดีและข้อเสีย ด้านล่าง Windows เป็นเสาหินมากขึ้นซึ่งหมายถึงส่วนประกอบน้อยกว่าของระบบปฏิบัติการที่ถอดออกได้หรือเป็นตัวเลือกเช่นใน Linux (แม้ว่า Windows จะค่อยๆดีขึ้นในเรื่องนั้น)

แต่ในทางกลับกันนั่นหมายถึงนักพัฒนาสามารถสร้างสมมติฐานเพิ่มเติมเกี่ยวกับไลบรารีที่ผู้ใช้จะมีอยู่บนเครื่องของเขาหรือเธอ และไลบรารีรุ่นต่าง ๆ ที่ติดตั้งครั้งเดียวจะถูกจัดเก็บแบบเคียงข้างกันในที่เก็บส่วนประกอบดังนั้นคุณจะไม่ต้อง App1 เห่าเกี่ยวกับการต้องการ crapDLL.dll อีกต่อไปและการเห่า App2 จะต้องเหมือนกันกับ crapDLL.dll รุ่นอื่นในเวลาเดียวกัน เวลา ฯลฯ


ขอบคุณไรอัน ฉันรู้ว่าฉันควรอธิบายคำตอบของฉันอย่างละเอียด แต่เนื่องจากภาษาอังกฤษไม่ใช่ภาษาหลักของฉัน
Filipe YaBa Polido

อธิบายได้ดี อย่างไรก็ตามฉันจะบอกว่ามันได้รับการแยกส่วนอย่างมีนัยสำคัญมากขึ้นในฝั่งเซิร์ฟเวอร์ - ตัวเลือกหลัก / gui- ฟรีการตั้งค่าตามบทบาทและคุณสมบัติ
EricB

ฉันอ่านบทความนี้เมื่อเช้านี้และทำให้ฉันนึกถึงโพสต์นี้ มันเป็นความบันเทิงแม้ว่าจะเป็นวงสัมผัสอ่านในหัวข้อนี้: blogs.msdn.com/b/oldnewthing/archive/2014/04/11/10516280.aspx
Ryan Ries

9

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

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

สำหรับแอปพลิเคชัน. NET Framework นั้นมีแอสเซมบลีแคชสากลแอสเซมบลีที่มีชื่อที่รัดกุมและที่รายการหลัก

ใน Windows 8 และ 8.1 มี Windows App Store พร้อมกับ Windows Runtime Library (การแทนที่ win32 API)

แก้ไข:ที่แกนกลางของเทคโนโลยีเหล่านี้ส่วนใหญ่จะมีแอสเซมบลี, ไฟล์ที่ฝังที่ให้หมายเลขรุ่น, ผู้แต่ง, แอสเซมบลีที่ขึ้นต่อกันและเวอร์ชันของมันในบรรดาข้อมูลอื่น


6

คำตอบอื่น ๆ ได้อย่างถูกต้องชี้ให้เห็นว่าการจัดการแพคเกจและระบบปฏิบัติการเป็นแนวคิดที่แยกจากกัน แต่ไม่ได้พูดถึงวิธีการแก้ปัญหา

ส่วนใหญ่ระบบการจัดการแพคเกจที่คล้ายกับ apt-get หรือ yum บน Windows ปัจจุบันจะchocolatey อนุญาตให้ผู้ใช้ติดตั้ง / ถอนการติดตั้งแพคเกจ (msi, exe, สคริปต์ powershell) และแพ็คเกจเหล่านั้นสามารถมีข้อมูลเกี่ยวกับการอ้างอิงของพวกเขาที่สามารถแก้ไขได้โดยอัตโนมัติโดย Chocolatey

แพคเกจมักจะมีลิงค์ไปยังไบนารีและสคริปต์เพื่อจัดการกระบวนการติดตั้ง แพคเกจยังสามารถมีไบนารีหรือไฟล์ที่จำเป็นอื่น ๆ (การอ้างอิงควรอยู่ในแพคเกจแยกต่างหาก) Chocolatey ยังสามารถใช้ระบบการจัดการแพ็คเกจภายนอกเช่นWeb Platform Installerของ Microsoft , Ruby Gems, Python และอื่น ๆ


แน่นอน! มีผู้จัดการแพ็กเกจบุคคลที่สามจำนวนหนึ่งที่ทำงานบน Windows เช่นกัน คนเดียวที่ฉันสามารถตั้งชื่อให้อยู่เหนือหัวของฉันคือ NuGet ซึ่งเป็นผู้จัดการแพ็คเกจ / การพึ่งพาสำหรับนักพัฒนาแอปพลิเคชั่นที่ติดตั้งอยู่ใน Visual Studio ที่กล่าวว่าฉันเชื่อว่าคำถามกำลังมองหาวิธีการที่ระบบปฏิบัติการจัดการแพคเกจที่โซลูชั่นเหล่านี้มีมากขึ้นต่อวิธีที่ผู้ใช้อาจจัดการแพคเกจ
Goldfish Sandwich

ขออภัยฉันไม่ได้รวมข้อมูลบางอย่างเกี่ยวกับ Chocolatey Chocolatey มีพื้นฐานมาจาก Nuget Nuget และ Nuspec เป็นเพียงแพ็คเกจของ 'stuff' และสเปคของการพึ่งพา ในกรณีของซอฟต์แวร์เฟรมเวิร์กเช่น. Net (ruby, node, ... ) การพึ่งพามักจะเป็นส่วนประกอบของซอฟต์แวร์ (dll, exe, js, ... ) เหล่านี้คือส่วนประกอบทั้งหมดที่แอปพลิเคชันใช้
AllenSanborn

ในกรณีของ Chocolatey แม้ว่าแพ็คเกจจะเป็นแอพพลิเคชั่นทั้งหมดหรือการพึ่งพาแอพพลิเคชั่น (เฟรมเวิร์กแอพเช่น java, .net, ruby) แพ็คเกจ Nuget มีสคริปต์ PowerShell (เป็นตัวเลือกในการติดตั้งด้วย) ที่จะจัดการการติดตั้งแอพและไฟล์ Nuspec จะอธิบายแอปพลิเคชันและการพึ่งพาใด ๆ ที่มีเช่น Powershell ขึ้นอยู่กับ. Net นอกจากนี้ยังมี Boxstarter ซึ่งมุ่งเน้นในระดับที่สูงขึ้นโดยอธิบายการกำหนดค่าของเครื่องและสิ่งที่ขึ้นอยู่กับ สวยเนี๊ยบ Boxstarter เข้าสู่อาณาจักรของสิ่งที่ผู้คนใช้ Chef หรือ Puppet
AllenSanborn

0

จากสิ่งที่ฉันเข้าใจการอ้างอิงเท่านั้นที่จัดการโดย Windows คือไลบรารีเฉพาะของ Microsoft หากคุณติดตั้งตัวอย่างโปรแกรมโอเพนซอร์ซใน Windows เช่น Blender จะมี libavcodec และไลบรารี ffmpeg ในไฟล์ dll ของตัวเองแยกต่างหากและถ้าคุณติดตั้งแล้วพูดว่า OpenShot มันจะติดตั้งสำเนาของตัวเอง libavcodec ในไดเรกทอรีของตัวเองและพวกเขาสามารถเป็นรุ่นที่แตกต่างอย่างสิ้นเชิง นี่อาจเป็นฝันร้ายเมื่อทำการถอนการติดตั้งซอฟต์แวร์เพื่อทำความสะอาดขยะที่ทิ้งไว้และมันก็ใช้พื้นที่ดิสก์มากขึ้นด้วยความซ้ำซ้อนของไลบรารี

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