2014-07-17 3 views
2

msi 설치시 사용자 지정 작업을 수행하려고합니다. 하지만 내 사용자 지정 작업에 필요한 dll은 다른 dll에 따라 다릅니다. 설치시 "이 설치를 완료하는 데 필요한 DLL이 실행되지 않습니다"와 같은 오류가 발생합니다.이 사용자 지정 작업이 제대로 실행 되려면 종속 DLL 파일을 어떻게로드 할 수 있습니까? 내가 사용하고Wix 사용자 지정 작업이 dll 파일을로드하지 못했습니다?

코드는

<CustomAction Id='CheckingPID' BinaryKey='CheckPID' DllEntry='ValidateKey' /> 
<Binary Id ='CheckPID' SourceFile='$(sys.CURRENTDIR)\LicenseKeyClient_32d.dll'/> 
<Binary Id ='CheckPID2' SourceFile='$(sys.CURRENTDIR)\curllib.dll'/> 
<Binary Id ='CheckPID3' SourceFile='$(sys.CURRENTDIR)\libsasl.dll'/> 
<Binary Id ='CheckPID4' SourceFile='$(sys.CURRENTDIR)\openldap.dll'/> 

답변

3

당신이 일반적으로 설치하는 동안 임시 이름으로 추출받을 이진 테이블에 추가 한 파일, 그래서 당신의 DLL이 추가 다른 DLL을 찾을 수 없습니다입니다 그 옆에.

해결 방법 임시 파일 시스템 폴더에 해당 DLL을 일반 파일로 추가하고 설치가 끝나면 삭제하십시오. 사용자 지정 작업을 지연으로 설정해야하므로 파일을 설치 한 후에 실행되므로 DLL이 Temp 폴더에 복사됩니다.

wix가 고급 설치 프로그램에있는 것과 비슷한 temporary files에 대한 지원을 가지고 있는지 여부는 잘 모르겠지만 시뮬레이트하기 위해 사용자 지정 작업을 작성하려고 시도 할 수 있습니다. 기본적으로 고급 설치 프로그램은 MSI가 시작될 때 Temp 폴더에있는 파일을 추출하고 설치가 완료되면 삭제합니다. 이렇게하면 임시 파일을 사용할 수 있고 패키지의 파일이 설치되기 훨씬 전에 즉석 사용자 정의 작업에서 이점을 얻을 수 있습니다.

+0

"평범한"불쾌한 방법은 이진 테이블에서 스트리밍하여 설치 및 제거 할 필요가 없도록하는 것입니다. 또한 사용자의 임시 폴더가 아닌 시스템의 임시 폴더로 의심됩니다. – PhilDW

2

보그의 훌륭한 대답에도 불구하고, 내 2 센트를 추가 할 수 있습니다 :

당신이 라이센스 키 검증 어떤 형태 다루고있는 것 같습니다

? 가장 좋은 방법은 일반적으로 HKCU 대신에 HKLM으로 쓰고 싶지 않은 경우 응용 프로그램 자체에서 라이센스 키를 처리하는 것입니다.이 경우 일반적으로 설치 중에 얻은 임시 관리 권한이 필요할 수 있습니다.

설치 중에 쓰기 위해 HKLM 키를 열 수 있으며 일반적으로 보안 측면에서 볼 때 싫은데도 불구하고 응용 프로그램에서 쓰기가 가능합니다. 이를 통해 응용 프로그램에서 모든 사용자에 대해 단일 라이센스 키를 직접 작성할 수 있습니다.

유연성제어 결정적으로 라이센스 키를 등록하는 과정의다시 프로세스를 실행하는 쉬운 방법을 제공합니다 응용 프로그램. 내 관점에서 볼 때 이것은 거의 항상 심각한 응용 프로그램에 필요합니다. 종종 응용 프로그램을 제거하고 다시 설치하는 대신 시험 버전이 필요하므로 최종적으로 응용 프로그램 내에서 시험 기간이 끝나면 라이센스 키를 등록해야합니다. 수리/유지 보수 모드에서 설치 프로그램을 실행하는 경우 - 매우 까다 롭습니다.

이 문제는 이전에 좀 더 자세히 설명했습니다 : Reasons to deal with licensing in the application rather than the setup.

0

또한 WiX DTF .NET 사용자 지정 작업을 사용하면 자동 압축 풀기 사용자 지정 동작 패키지에 콘텐츠를 포함시키고 런타임시 현재 디렉터리에서 사용할 수 있도록하여이 문제를 간단하게 처리 할 수 ​​있습니다. 아주 쉽게.

그래, Glytzhkof가 맞습니다. MSI 내부에서 이루어진 모든 라이센스/DRM은 쉽게 무효화됩니다.앱에서 또는 두 가지 모두에서이 작업을 수행하는 것이 가장 좋습니다. 예를 들어 필자는 주식 책임이있는 회사에서 일했습니다. 지금 또는 나중에 입력 할 수 있습니다. 또한 라이센스 키에 비트가 임베드되어 기능 선택을 유도 한 회사에서 일했습니다. 그것은 복잡해지기 때문에 그 길을 내려 가지 않아야합니다.

관련 문제