2009-07-20 3 views
1

VS 2008 설치 및 배포 프로젝트를 사용하여 관리되는/관리되지 않는 혼합 된 응용 프로그램을 배포하고 있습니다. 나는 "등록"속성의 열거 된 값인 "vsdraCOM"내장 등록 정보를 사용하여 혼합 모드 DLL을 등록하는 데 문제가있었습니다. 해결 방법으로 .NET 사용자 정의 설치 어셈블리를 추가했습니다. System.Configuration.Install.Installer에서 파생됩니다.) 나는 그 클래스가 실행 중이고 다수의 작업이 성공적으로 설치되고 어셈블리의 코드를 통해 제거한다는 것을 확신합니다. 여러 어셈블리의 Dll (Un) RegisterServer 진입 점 실행 ..NET 사용자 지정 동작을 실행하기 전에 GAC를 강제 설치 하시겠습니까?

그러나 하나의 DLL이 성공적으로 등록되지 않았습니다. GAC에 설치하려는 일부 타사 재배포 가능 어셈블리에 의존하는 유일한 DLL입니다. VS 2008 설치 및 배포 프로젝트의 기본 제공 기능 덕분에 이러한 어셈블리가 GAC에 설치되었습니다. 설치 프로그램이 GAC 설치를 실행하기 전에 사용자 지정 작업이 실행 중임을 확인했습니다.

휴. 그래서 제 질문은, 사용자 지정 작업을 실행하기 전에 설치 프로그램이 GAC 설치를 실행하도록하는 방법이 있습니까? 이 작업을 수행하는 사용자 지정 작업의 "조건"속성을 사용하는 방법이 있습니까? 그렇지 않다면 최선의 대안은 무엇입니까? DLL에서 레지스트리 항목을 캡처하여 설치 프로그램의 레지스트리 설정에 추가하십시오 (나중에 누군가가 새 COM 서버를 클래스에 추가 할 수 있기 때문에 마음에 들지 않습니다). .NET 코드를 사용하여 어셈블리를 수동으로 GAC에 설치합니다 (아직 수행 방법을 모름).

감사합니다,

데이브

답변

2

당신은 Visual Studio에서 만들 수있는 설치 프로젝트는 매우 제한되어 있습니다. 사용자 지정 작업은 4 개 지점에서만 예약 할 수 있습니다. 그러나 MSI는 사용자 지정 작업을 수행 할 수있는 것에 대한 제한을두고 프로세스의 어느 시점에서든 사용자 지정 작업을 예약 할 수 있습니다.

첫 번째 해결 방법은 설치 개발 도구로 Visual Studio 2008 사용을 중단하는 것입니다. Visual Studio 팀은 설치를 만드는 모든 복잡한 작업을 추상화하려고 노력했습니다. 그러나이 과정에서 MSI의 모든 유연성을 제거했습니다. Wix, InstallShield 또는 Wise는 단순한 설치 외에는 훨씬 더 나은 제품입니다. 설치를 위해 Visual Studio를 사용하기 시작했는데 너무 많은 작업이 필요했습니다. 구현할 하나의 해결 방법과 그 부작용이 항상있었습니다.

기술을 전환 할 수없는 경우 결과로 생성되는 MSI 파일을 수동으로 수정하는 방법을 배워야합니다. 귀하의 경우 InstallExecuteSequence 테이블 http://msdn.microsoft.com/en-us/library/aa369500(VS.85).aspx을 수정해야합니다. Orca, http://msdn.microsoft.com/en-us/library/aa370557(VS.85).aspx 또는 MSI API http://msdn.microsoft.com/en-us/library/aa372860(VS.85).aspx을 통해 수동으로이 작업을 수행 할 수 있습니다. Orca를 다운로드하고 설치에 대해 유효성 검사 스크립트를 실행하십시오. 스크립트는 고객 시스템에 배포 할 때 수많은 시간을 절약 할 수있는 수많은 문제를 지적합니다.

+0

감사합니다. 우리는 installshield를 사용합니다. 그러나 빌드 컴퓨터가 다시 실행되기까지 몇 주일이 걸릴 것이므로 안정적인 설치가 필요합니다. MSI API 솔루션은 유망한 것으로 들립니다. 참고로 System.EnterpriseServices.Internal.Publish.GACInstall()이 GAC에 임의의 어셈블리를 설치한다는 것을 알았지 만 이는 여러 가지 이유로 적합하지 않습니다 ("Internal", 약간의 오류 검사, 롤백/의미를 제거하십시오.) –