2010-03-26 5 views
1

관리되는 DLL을 설치하고 솔루션 탐색기의 Visual Studio의 "참조 추가"메뉴에서 사용자가 액세스 할 수 있도록하는 MSI 설치 관리자를 만들고 싶습니다. . Windows 레지스트리에 키를 추가해야한다고 생각하지만 설치시 MS 프로젝트를 VS 프로젝트에 지시하는 방법을 알 수 없습니다.DLL을 설치하여 VS에있는 "참조 추가"에서 액세스 할 수 있도록 MSI 빌드

이 작업은 어떻게 수행되며이 유형의 튜토리얼을 어디에서 찾아야합니까? 다음 레지스트리 키에

답변

1

이동합니다

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders 

이 하위 키를 추가 (중요하지 않습니다 이름있는, 그러나뿐만 아니라 설명이 될 수 있음), 그 디폴트 값은 폴더 당신의 어셈블리를 포함하는 것입니다 너는 잘 가야한다. 윅스

를 사용하여 필요한 키를 추가하는 방법

이것은 필요한 키를 생성하고 어셈블리를 설치 한 폴더에 기본 값을 설정하기위한 윅스 코드의 제거 다운 조각. 이것은 완전한 WiX 설치 프로그램이 아니며 직접 붙여 넣을 수 없습니다. Guid 속성을 제거했으며 디렉토리, 구성 요소 및 기능 선언 만 표시했습니다. 당신은 전체 윅스 스크립트를 가지고 일단 당신이 어떤 완전한 윅스 코드는 이러한 비트를 병합하는 방법을 합리적으로 명확해야 본 적이되면.

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <!-- Path from WiX file to the DLL(s) you're installing --> 
    <?define BuildPath="..\Bin\Release" ?> 
    <!-- The base key path - note no HKLM --> 
    <?define AssemblyFolders = "Software\Microsoft\.NETFramework\AssemblyFolders" ?> 

    <Product> 
    <Directory Id="TARGETDIR" Name="SourceDir"> 
     <Directory Id="ProgramFilesFolder"> 
     <Directory Id="CompanyFolder" Name="YourCompany"> 
      <Directory Id="INSTALLLOCATION" Name="Your Product"> 
      <!-- Id="AssemblyFolder" captures the location where the DLL gets installed --> 
      <Directory Id="AssemblyFolder" Name="Bin"> 
       <Component Id="AssemblyComponent"> 
       <!-- This is the bit that copies the assembly file --> 
       <File Id="YourDll.dll" Checksum="yes" Source="$(var.BuildPath)YourDll.dll" /> 
       </Component> 
       <Component Id="ControlRegistrationComponent"> 
       <!-- This is the bit that creates the registry key --> 
       <RegistryKey Action="createAndRemoveOnUninstall" Root="HKLM" Key="$(var.AssemblyFolders)\Your Product Name"> 
        <!-- Square brackets result in a reference -- so the install folder gets picked up --> 
        <RegistryValue Action="write" Value="[AssemblyFolder]" Type="string" /> 
       </RegistryKey> 
       </Component> 
      </Directory> 
      </Directory> 
     </Directory> 
     </Directory> 
    </Directory> 

    <Feature Id="PRODUCTROOTFEATURE"> 
     <!-- This causes the assembly to be installed --> 
     <ComponentRef Id="AssemblyComponent" /> 
     <!-- This causes the registry key to be created --> 
     <ComponentRef Id="ControlRegistrationComponent" /> 
    </Feature> 

    </Product> 
</Wix> 

, 당신은 배치 파일을 사용할 수 있으며, MSI를 빌드하려면

candle.exe "%WXS_NAME%.wxs" -out "%WXS_NAME%.wixobj" 
light.exe "%WXS_NAME%.wixobj" -out "%WXS_NAME%.msi" 

여기서 % WXS_NAME %은 WiX .wxs 소스 파일의 이름입니다.

(아마도 이것은 다소 수수께끼 같지만 (a) 시작하기 쉽도록 WiX 샘플, 튜토리얼 및 참고 자료가 많이 있으며 (b) Visual Studio 용 봉헌 애드 인이 어쨌든 일부 내장재에서).

MSI를 자동으로 빌드하려면 Votive 추가 기능 (WiX의 일부) 또는 빌드 후 단계 또는 MSBuild 빌드 스크립트를 사용하십시오. 빌드 스크립트를 사용하는 이유는 자동화 된 빌드의 일부로 MSI를 빌드하기를 원하기 때문입니다. 빌드 후 단계에서 수행하면 개발 빌드가 느려지므로 마일리지가 다를 수 있습니다.

+0

대상 컴퓨터에서 레지스트리를 편집하고 Microsoft, .NETFramework 및 AssemblyFolders를 HKEY_LOCAL_MACHINE \ SOFTWARE에 추가 ​​한 다음 설치 위치가 하드 코드 된 문자열을 추가했습니다 (환경 변수를 사용해야 함). 그러나 여전히 작동하지 않습니다. DLL이 참조 추가에 표시되지 않습니다. 내가 뭘 잘못하고 있는거야? –

+0

AssemblyFolders 아래에 * (regedit, 폴더에) 키를 만들고 * 하위 키 *의 기본값을 설정해야한다는 것을 잊지 마십시오. 예제를 보려면 컴퓨터의 레지스트리를 살펴보십시오. 그리고 당신이 기본 키를 만들어야한다는 것에 조금 놀랐습니다 - 이미 거기에 있어야합니다 (특히'HKLM \ SOFTWARE \ Microsoft'!). 이 방법을 잘못 사용하지 마십시오. 올바른 장소에 키를 추가 하시겠습니까? – itowlson

+0

참조 추가 대화 상자에 기여하는 또 다른 위치는'HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ .NETFramework \ v2.0.50727 \ AssemblyFoldersEx'입니다. – itowlson

관련 문제