본문 바로가기

IT 살이/04. 기술 - 프로그래밍

ClickOnce에서 필수 구성 요소별로 지원 URL 지정하기

오늘 메모를 정리하다가 그냥 버리기가 아까운 정보가 있어 아직 테스트 해 보지는 않았지만 기록을 하나 남겨두려고 한다.
ClickOnce 어플리케이션이 실행되기 전에 필요한 필수 프로그램이 사전에 설치되어 있어야 한다면 우리는 당연히 부트스트래퍼를 떠올릴 것이다(아닌가...-_-;;). ClickOnce 어플리케이션이 실행되다가 반드시 있어야 하는 구성요소가 사전에 설치되어 있지 않다면 에러창을 보여준다. 에러창에서 문제 해결을 위한 좀 더 구체적인 내용을 담고 있는 페이지에 대한 URL을 보여줄 수 있다는것이다. 예를 들어 사전에 GAC에 등록되어 있어야 하는 어셈블리가 있다면 그것을 설치할 수있는 MSI 파일에 대한 링크를 그 지원 페이지에 포함시킬 수도 있을 것이다. 사용자는 링크의 페이지의 설치 링크를 통해서 필요한 구성요소를 설치하고 다시 어플리케이션을 실행시킬 수 있다.
물론 부트스트래퍼를 이용해서 모든 필수 구성 요소를 사전에 설치해야 겠지만 추후에 새로운 필수 프로그램이 하나 더 추가되었다고 해 보자. 사정이 허락하지 않아, 음 어떤 사정일지는 모르겠지만 사용자들이 다시 부트스트래퍼를 실행하는 것이 힘든 상황이라면 게시자는 어플리케이션 매니페스트 파일(.exe.manifest)에 수작업으로 supportUrl 어트리뷰트를 필수 구성 요소별로 지정해 줄 수 있다. 그렇게 기존의 매니페스트 파일을 수정했다면 다시 두 매니페스트 파일에 서명을 한 후 ClickOnce 어플리케이션을 다시 게시해야 할 것이다. 다음은 supportUrl을 사용하는 몇가지 예제이다. .
먼저 필요한 OS의버전에 대한 지원 URL입니다.
  <dependency>
    <dependentOS supportUrl="http://www.adatum.com/MyApplication/wrongOSFound.htm">
      <osVersionInfo>
        <os majorVersion="4" minorVersion="0" servicePackMajor="0" servicePackMinor="0" />
      </osVersionInfo>
    </dependentOS>
  </dependency>

다음은 필요한 CLR의 버전에대한 지원 URL 설정예입니다.

<dependency>
    <dependentAssembly dependencyType="preRequisite" allowDelayedBinding="true" supportUrl=" http://www.adatum.com/MyApplication/wrongClrVersionFound.htm">
      <assemblyIdentity name="Microsoft.Windows.CommonLanguageRuntime" version="2.0.40607.0" />
    </dependentAssembly>
  </dependency>

다음은 GAC에 등록되어있어야 하는 필수 어셈블리에 대한 지원 URL입니다.

  <dependency>
    <dependentAssembly dependencyType="preRequisite" allowDelayedBinding="true" supportUrl=" http://www.adatum.com/MyApplication/missingSampleGACAssembly.htm">
      <assemblyIdentity name="SampleGACAssembly" version="5.0.0.0" publicKeyToken="04529dfb5da245c5" processorArchitecture="msil" language="neutral" />
    </dependentAssembly>

각 지원 URL이 가리키고 있는 페이지에서는 필수 구성 요소를 설치할 수 있는 설치 파일에 대한 링크를 가지고 있으면 된다.
  </dependency>