2009-10-19 7 views
18

타사 .NET DLL (이 경우에는 MySql.Data.dll)에 종속 된 CustomAction C# DLL 파일을 만들려고합니다. 아래 C# 사용자 지정 작업 DLL 파일을 아래의 WiX 조각으로 작업 할 수 있습니다. 난 그냥 안전하게 사용자 지정 작업에 종속성을 추가하는 방법을 알아 내려는 중입니다. 참고 : 설치 한 응용 프로그램을 실행하기 위해 실제로이 타사 DLL 파일 파일이 필요하지 않습니다. 종속성이있는 WiX 사용자 지정 동작 DLL 파일을 실행하는 방법

<Binary Id="MyCustomAction.dll" SourceFile="MyCustomAction.CA.dll" /> 

    <CustomAction Id="FixupConfigForMysql" Return="check" /> 

    <InstallExecuteSequence> 
    <Custom Action='FixupConfigForMysql' After='InstallFiles'>NOT Installed</Custom> 
    </InstallExecuteSequence> 

내가 사용자 지정 작업을 실행할 얻기 위해 타사 DLL 파일 ( MySql.Data.dll)를 설치해야합니까?

타사 DLL 파일에 다른 이진 태그를 추가 할 수 있습니까?

답변

19

WiX 도구 모음의 DTF에는 사용자 지정 작업 어셈블리와 모든 참조를 단일 바이너리 (기본적으로 자동 압축 해제 dll)에 포함시키는 메커니즘이 있습니다. 나는 (C/C++은 더 적은 의존성으로 커스텀 액션을 생성하고 성공률을 증가시킨다) 관리 된 커스텀 액션을 작성하지 않지만, VS로 빌드 할 때만 작동하도록되어있다.

+8

이것은 단지 작동하는 것처럼 보였습니다. 사용자 지정 작업 빌드 프로세스가 이러한 종속성을 추가하기 때문에 발생했을 수 있습니다. 올바르게 이해하면 사용자 지정 동작 빌드에 의해 생성 된 .CA.dll의 일부가됩니다. http://blogs.msdn.com/jasongin/archive/2008/05/23/custom-action-project-templates.aspx –

+4

@AdamTegen이 기사를 게시 해 주셔서 감사합니다. 내 머리를 두드리는 또 다른 주를 저장해 줘서 고맙습니다. 벽! 중요한 라인은 "사용자 지정 작업 빌드 프로세스는 CA가 의존하는 모든 비 GAC 어셈블리를 자동으로 패키지화합니다."내 모든 개발 어셈블리 상자는 GAC의 개발 상자에 있었으므로 그 이유를 알 수 없었습니다. 테스트 상자에있는 것처럼 보입니다. 감사! –

+2

다른 사람들에게주는주의 사항으로, 'Binary' 엘리먼트가 WiX가 생성하는'.CA.dll' 파일을 가리키고 원래의 .NET DLL이 아닌지 확인하십시오 – Cocowalla

4

<Binary />을 사용하여 사용자 지정 작업을 실행하는 데 필요한 파일을 추가 할 수 있습니다. 그건 당신이 필요로하는 제 3 자 dll을 위해 가야합니다. 바이너리 요소를 사용하여 포함 된 파일은 설치 중에 만 사용되며 설치되는 응용 프로그램의 일부로 간주되지 않습니다.

업데이트 : CustomAction과 이진 간의 연결은 BinaryKey 특성을 사용하여 사용자 지정 동작에서 이진을 참조하여 수행됩니다.

당신은 바이너리에 따라 사용자 지정 작업을 할 수 있습니다 (I이 시도하지 않은 직접 MSI custom action table이에 대한 지원을 참조하지 않는) 여러 BinaryKey의 속성을 가질 수없는 한

. 따라서이 바이너리는 필요한 모든 의존성을 자체적으로 수행해야합니다.

귀하의 dll이 .Net 어셈블리 인 경우 ILMerge을 사용하여 단일 어셈블리로 패키지를 만드는 것이 좋습니다.

+1

그럴 수 없습니다. 여분의 이진 스트림은 추출되지 않습니다. –

3

Visual Studio에서 하드 참조의 '로컬 복사'속성을 True로 설정하십시오.

1

Mensching 씨의 의견에 이어 좀 더 자세히 설명하겠습니다.

적어도 Wix 3.0 이상인 경우 MakeSfxCA.exe를 사용하여 단일 DLL의 종속성을 패키지화 할 수 있습니다. (이것은 DFT - Deployment Tools Foundation의 추가 기능입니다.) 기본적으로 프로젝트가 종속 DLL을 복사하고 있는지 확인하여 시작하십시오. CustomAction.config 파일을 만듭니다. 그 작동되면

REM MyMakeSfxCA.bat - Run under $(TargetDir); abs. paths reqd. 
"%WIX%\SDK\MakeSfxCA"^
    %cd%\Managed_custom_action_pkg.dll^
    "%WIX%\SDK\x86\sfxca.dll"^
    %cd%\Managed_custom_action.dll^
    %cd%\Dependent1.dll^
    %cd%\Dependent2.dll^
    %cd%\Microsoft.Web.Administration.dll^
    %cd%\Microsoft.Deployment.WindowsInstaller.dll^
    %cd%\CustomAction.config 

는 빌드 후 이벤트로 변환 : 같은 간단한 .bat 파일에 테스트

: 당신의 .wxs 파일에서

"$(WIX)\SDK\MakeSfxCA"^
    $(TargetDir)\Managed_custom_action_pkg.dll^
    "$(WIX)\SDK\x86\sfxca.dll"^
    $(TargetDir)\Managed_custom_action.dll^
    $(TargetDir)\Dependent1.dll^
    $(TargetDir)\Dependent2.dll^
    $(TargetDir)\Microsoft.Web.Administration.dll^
    $(TargetDir)\Microsoft.Deployment.WindowsInstaller.dll^
    $(TargetDir)\CustomAction.config 

, 당신의 바이너리 키 모양을

<Binary Id="Managed_custom_action_CA_dll" 
     SourceFile="$(var.Managed_custom_action.TargetDir)$(var.Managed_custom_action.TargetName)_pkg.dll" /> 

CustomAction.config의 경우 온라인에서 예제를 찾을 수 있습니다.

내가 찾은 가장 좋은 방법입니다.

관련 문제