2014-01-24 6 views
3

WiX에서 대상 컴퓨터의 임시 숨김 폴더 (예 : SUPPORTDIR IS)를 설치하는 동안 설치하는 방법과 파일을 추가하는 방법을 이진 테이블에 저장하는 방법 설치가 wix에서 완료된 후에 삭제할 수 있습니까?설치 중에 임시 폴더 만들기

도움에 감사드립니다.

감사합니다.

+0

이 설명은 도움이 될 수 있습니다. http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Extract-Binary-file-from-MSI-to-Temp-folder-using-C -td7588682.html # a7588730 –

+0

또한 http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/SUPPORTDIR-for-WIX-td2389950.html 및 this http://stackoverflow.com/questions/2624603/wix-a-temporary-file-during-install을 이해하는 것이 도움이 될 수 있습니다. –

+0

@Yan : 답변 해 주셔서 감사합니다.나는 전에 그것을 읽었습니다. 그러나 나는 C# DTF를 다루는 방법을 모른다. – sam

답변

0

이것은 내 의견에서 참조한 the idea을 확장 한 샘플 솔루션입니다.

간단히 말해서, 이진 테이블에 추가 파일을 추가하여 솔루션을 복잡하게 만들 필요가 없습니다. 사용자 지정 작업에서 추출하고 나중에 제거하십시오. DTF 커스텀 액션에 내장 된 메커니즘이 당신을 대신합니다.

설치 로그 파일에 정보를 출력하기 위해 사용자 지정 작업에서 읽을 XML 파일이 있다고 가정 해 보겠습니다. 먼저 VS (파일 -> 새로 만들기 -> 프로젝트 ...)에서 사용자 지정 동작 프로젝트를 만들고 "C# 사용자 지정 동작 프로젝트"템플릿을 선택해야합니다.

그런 다음 XML 파일을 컨텐츠로 추가하십시오. 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 추가 -> 새 항목 ...을 선택하고 XML 파일을 선택하십시오. data.xml이라고합시다. 내용은 다음과 같습니다

<?xml version="1.0" encoding="utf-8" ?> 
<settings> 
    <setting name="a" value="one" /> 
    <setting name="b" value="two" /> 
</settings> 

다음,이 XML의 값을 읽고 설치 로그에 뭔가 작성하는 몇 가지 코드를 추가 (기억을, 그냥 샘플입니다) :

[CustomAction] 
public static ActionResult ReadXml(Session session) 
{ 
    var doc = XDocument.Load("data.xml"); 
    var settings = from setting in doc.Descendants("setting") 
       select new 
       { 
        Name = setting.Attribute("name").Value, 
        Value = setting.Attribute("value").Value 
       }; 

    foreach (var setting in settings) 
    { 
    session.Log(string.Format("{0} = {1}", setting.Name, setting.Value)); 
    } 

    return ActionResult.Success; 
} 

data.xml과 같이 XML 파일을 참조한다. 사용자 지정 작업이 실행될 때 파일은 실행되는 디렉터리와 동일한 디렉터리에서 찾을 수있다.

마지막으로, 설치 과정에 사용자 지정 작업을 추가, 이제

<Binary Id="MainBinary" SourceFile="bin\ExtraFiles.CA.dll" /> 
<CustomAction Id="ReadXmlCA" BinaryKey="MainBinary" DllEntry="ReadXml" Execute="deferred" /> 

<InstallExecuteSequence> 
    <Custom Action="ReadXmlCA" After="InstallFiles" /> 
</InstallExecuteSequence> 

MSI 패키지를 구축하고 설치를 다음과 같은 방법으로 실행

패키지 설치가 완료
msiexec -i SupportDir.msi /l*v install.log 

오픈 install.log 파일을 검색하여 CustomActions.ReadXml을 검색하십시오.

SFXCA: Extracting custom action to temporary directory: C:\Windows\Installer\MSIAB8D.tmp-\ 
SFXCA: Binding to CLR version v4.0.30319 
Calling custom action ExtraFiles!ExtraFiles.CustomActions.ReadXml 
a = one 
b = two 

물론, 사용자 지정 작업이 일을하고있다 : 당신은 같은 것을 볼 수는 로그 파일에 XML 파일의 내용과 출력 적절한 정보를 읽어보십시오. 참고로 한 가지 더 : 임시 디렉토리 경로. 해당 디렉토리를 탐색 해보십시오. 디렉토리가 비어 있음을 알 수 있습니다.

이것은 DTF가 사용자 지정 작업 코드에서 파일을 사용할 수 있도록 파일을 추출하고 작업 완료 후 정리하는 데주의를 기울 였음을 의미합니다.

이 개요가 작동 방식을 이해하는 데 도움이되기를 바랍니다.

+0

어떤 이유로 Windows Installer가 임시 폴더를 변경하기 때문에이 솔루션이 작동하지 않습니다. –