Windows는 프로그램 종속성을 어떻게 처리합니까?


23

나는 꽤 오랫동안 리눅스를 사용해 왔으며, 항상 Windows가 apt-get , aptitude , Pacman , yum 및 기타 패키지 관리자와 같은 프로그램 문제를 어떻게 처리 할 수 ​​있는지 궁금 했습니다. 때때로, 패키지 관리자가이 버전의 해당 라이브러리가이 패키지에 필요했거나 충돌이있을 수 있다고 알려줄 것입니다.

Windows는이 모든 것을 어떻게 처리합니까?


2
Windows 버전 종속성을 처리 하지 않습니다 . 대부분의 버전 설치 프로그램은 그렇게합니다. 아직 익숙하지 않다면 InnoSetup을 확인하십시오 : jrsoftware.org/isinfo.php
paulsm4

4
여러분의 예제에서도 의존성을 관리하는 것은 Linux 자체가 아니라 패키지 관리자 라는 점에 주목할 가치가 있습니다.
GalacticCowboy

3
Windows는 프로그램 종속성을 어떻게 처리합니까? 내 경험으로는 나쁘다.
rlms

답변:


29

그렇지 않습니다. 컴파일러에 따라 프레임 워크 버전 X를 설치하도록 요청 하는 .NET 에 대해 이야기하지 않는 한 .

다른 모든 것들은 단지 오류를 던집니다. 행운을 빕니다 missing dll xxxx.dll. 그러나 대부분의 설치 프로그램에는 소프트웨어를 실행하는 데 필요한 라이브러리가 포함되어 있습니다.


6
따라서 중복성을 검사하는 것은 각 프로그램의 설치자에게 달려 있습니까? 따라서 설치 프로그램이 짜증 나면 프로그램을 전혀 사용하지 못할 수도 있습니다.
Nico

말할 필요도 없습니다. 그렇다면 프로그램을 사용할 수는 있지만 필요한 DLL 또는 프레임 워크를 파악해야합니다.
Filipe YaBa Polido

9
@Filipe V C ++ 런타임 을 설치해야한다는 사실이 .NET 소프트웨어를 싫어하는 이유입니까? 또한 Windows에는 기본적으로 이미 .NET 프레임 워크가 설치되어 있으므로 올바른 버전을 대상으로하면 기본적으로 작동합니다. 그리고 누락 된 공유 객체를 다운로드하여 설치해야한다는 사실은 명백한 이유로 특정 소프트웨어 / 언어 / 프레임 워크로 제한되지 않습니다 (* nix에서도 동일한 "문제"를 가질 수 있습니다).
Voo

2
@FilipeYaBaPolido : VC ++ 2008 런타임이 .Net 애플리케이션이 아닌 C ++ 애플리케이션을위한 것이기 때문에 당신의 증오가 특히 잘못되었습니다. 분명히 .Net 응용 프로그램에는 .Net 프레임 워크가 필요하고 C ++ 응용 프로그램에는 실제로 매우 간단한 C ++ 프레임 워크 (런타임)가 필요합니다. 이제 특정 소프트웨어 패키지에 C ++ 및 .Net 파트가 모두 포함될 수 있으므로이 두 패키지가 독점적이지 않습니다.
MSalters

2
사람들은 긴장을 풀고 .Net 또는 VC ++를 싫어하지 않습니다. 필요할 때 .Net / C #으로 코드를 작성하는 도구이기도합니다. 그러나 나는 다른 도구로 작업하고 차이점을 봅니다. 내가 잘못 설명하면 죄송합니다.
Filipe YaBa Polido

40

2014 년 4 월 4 일 수정 : 안녕하세요. 오늘 출시 된 내용을 확인하세요.

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


나는 단지 대답에 약간의 확장을 원했습니다. 세부 사항에 대해서는 조금 드문 일이기 때문입니다. 필리페의 대답은 Windows가 실제로 그 전략에 대한 언급도하지 않습니다 않는 구성 요소 가게처럼 해결하거나 완화 프로그램 의존성 문제로 사용을 (WinSxS에, 등) 전역 어셈블리 캐시는 MSI 시스템을, 그러나 다른 한편으로 그는의 기본적 권리에 앱에 사용자 지정 라이브러리를 포함시키고 설치 트랜잭션을 커밋하기 전에 종속성이 있는지 확인하는 것은 개발자의 책임입니다.

Windows는 Linux보다 모듈식이 적으며, 장점과 단점이 있습니다. 단점은 Windows가 더 모 놀리 식 (monolithic)이므로 운영 체제의 구성 요소가 Linux에서와 같이 제거 가능하거나 선택적으로 상대적으로 적다는 것입니다. (그러나 Windows는 천천히 그것에 대해 나아지고 있습니다.)

그러나 반대로, 개발자는 사용자가 자신의 컴퓨터에 어떤 라이브러리를 가지고 있는지에 대해 훨씬 더 많은 가정을 할 수 있습니다. 그리고 일단 설치되면 해당 라이브러리의 다양한 버전이 구성 요소 저장소 에 나란히 저장되어 더 이상 crapDLL.dll 필요에 대한 App1 짖는 소리와 같은 시간에 crapDLL.dll의 다른 버전이 필요하다는 App2 짖는 소리가 없습니다 시간 등


고마워 라이언. 나는 대답을 정교하게해야한다는 것을 알고 있지만, 영어가 모국어가 아니기 때문에 여전히 표현할만한 특징이 있습니다.
Filipe YaBa Polido

잘 설명되어 있습니다. 그러나 서버 측에서는 코어 / gui-free 옵션, 역할 및 기능 기반 설정과 같이 훨씬 모듈화되고 있다고 말합니다.
EricB

오늘 아침이 기사를 읽었으며이 게시물을 상기시켜주었습니다. 이 주제에 대한 접선이지만 재미있는 글이지만 blogs.msdn.com/b/oldnewthing/archive/2014/04/11/10516280.aspx
Ryan Ries

9

Windows에서는 라이브러리의 버전 관리를 제공하는 것은 소프트웨어 제작자에게 달려 있습니다. Windows에는이를 지원하는 몇 가지 기능이 있습니다.

설치 프로그램 (.msi)과 상호 작용하는 Windows Installer 및 Trusted Installer 서비스 버전 관리 충돌을 분류하는 데 도움이되는 격리 된 응용 프로그램 및 단계별 어셈블리라는 지원 기술도 있습니다.

.NET 프레임 워크 응용 프로그램의 경우 전역 어셈블리 캐시, 강력한 이름의 어셈블리 및 핵심 매니페스트가 있습니다.

Windows 8 및 8.1에는 Windows 런타임 라이브러리 (win32 API 교체)와 함께 Windows App Store가 있습니다.

편집 : 이러한 기술의 대부분은 다른 데이터 중에서도 버전 번호, 작성자, 종속 어셈블리 및 해당 버전을 제공하는 임베디드 파일 인 어셈블리 매니페스트입니다.


6

다른 답변은 패키지 관리와 OS가 별도의 아이디어이지만 해결책을 언급하지 않았다는 것을 올바르게 지적했습니다.

Windows에서 apt-get 또는 yum과 가장 유사한 패키지 관리 시스템은 현재 Chocolatey 입니다. 사람들이 패키지 (msi, exe, powershell scripts)를 설치 / 제거 할 수 있으며,이 패키지에는 Chocolatey가 자동으로 해결할 수있는 종속성에 대한 정보가 포함될 수 있습니다.

패키지에는 일반적으로 설치 프로세스를 관리하기위한 바이너리 및 스크립트에 대한 링크가 포함되어 있습니다. 패키지에는 바이너리 또는 기타 필요한 파일이 포함될 수도 있습니다 (종속성은 별도의 패키지에 있어야 함). Chocolatey는 Microsoft의 Web Platform Installer , Ruby Gems, Python 등과 같은 외부 패키지 관리 시스템을 사용할 수도 있습니다 .


전혀! Windows에서도 실행되는 소수의 타사 패키지 관리자가 있습니다. Visual Studio에 내장 된 응용 프로그램 개발자를위한 패키지 / 종속성 관리자 인 NuGet은 내 머리 위에 이름을 지정할 수있는 유일한 도구입니다. 즉, 운영 체제가 패키지를 처리하는 방법에 대한 질문이 더 많이 있다고 생각했는데,이 솔루션은 사용자가 패키지를 처리하는 방법에 더 가깝습니다.
금붕어 샌드위치

죄송합니다 Chocolatey에 대한 정보를 포함하지 않았습니다. Chocolatey는 Nuget을 기반으로합니다. Nuget과 Nuspec은 단지 '물건'패키지와 종속성 사양입니다. .Net (ruby, node, ...)과 같은 소프트웨어 프레임 워크의 경우 종속성은 일반적으로 소프트웨어 구성 요소 (dll, exe, js 등)입니다. 그것들은 응용 프로그램이 사용하는 모든 구성 요소입니다.
AllenSanborn

Chocolatey의 경우 패키지는 전체 응용 프로그램 또는 응용 프로그램 종속성 (java, .net, ruby와 같은 응용 프로그램 프레임 워크)이지만 Nuget 패키지에는 앱 설치를 관리하는 PowerShell 스크립트 (선택적으로 설치 관리자도 포함)가 포함되어 있으며 Nuspec 파일은 응용 프로그램 및 응용 프로그램에 대한 종속성 (예 : Powershell이 ​​.Net에 의존 함)을 설명합니다. 또한 기계의 구성과 그에 의존하는 것을 설명하여 레벨을 높이는 Boxstarter도 있습니다. 아주 깔끔한 물건. Boxstarter는 사람들이 Chef 또는 Puppet을 사용하는 영역으로 들어갑니다.
AllenSanborn

0

내가 이해 한 바에 따르면 Windows가 처리하는 유일한 종속성은 Microsoft 특정 라이브러리입니다. 예를 들어 Blender와 같은 Windows에 오픈 소스 프로그램을 설치하면 libavcodec 및 ffmpeg 라이브러리가 별도의 dll 파일에 설치되고 OpenShot을 설치하면 자체 사본이 설치됩니다. libavcodec는 자체 디렉토리에 있으며 완전히 다른 버전 일 수 있습니다. 남은 정크를 정리하기 위해 소프트웨어를 제거 할 때 악몽이 될 수 있으며 라이브러리 중복성을 통해 더 많은 디스크 공간을 차지합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.