KR101104035B1 - 자원 매니페스트 - Google Patents
자원 매니페스트 Download PDFInfo
- Publication number
- KR101104035B1 KR101104035B1 KR1020040070419A KR20040070419A KR101104035B1 KR 101104035 B1 KR101104035 B1 KR 101104035B1 KR 1020040070419 A KR1020040070419 A KR 1020040070419A KR 20040070419 A KR20040070419 A KR 20040070419A KR 101104035 B1 KR101104035 B1 KR 101104035B1
- Authority
- KR
- South Korea
- Prior art keywords
- resource
- file
- language
- data
- data field
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
- G06F9/454—Multi-language systems; Localisation; Internationalisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Computer Security & Cryptography (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Machine Translation (AREA)
- Devices For Executing Special Programs (AREA)
- Document Processing Apparatus (AREA)
Abstract
개선된 애플리케이션 아키텍처는, 능률성을 위하여 보다 큰 파일들의 보다 작은 세트로 압축된, 언어 중립적(language neutral) 부분 및 로컬화 가능(localizable) 부분을 갖는 두 갈래 분기형(bifurcated) 구조를 포함한다. 이 두 갈래 분기형 구조는 보다 용이한 애플리케이션의 배포 및 업데이트를 가능하게 하고, 그와 동시에 축소된 파일들의 세트는 보다 능률적인 파일 관리를 제공한다. 언어 특정적인 엘리먼트들 및 언어 중립적인 채로 있는 엘리먼트들을 식별하기 위해 컴파일 단계 중에 자원 매니페스트가 지정될 수 있다. 또한, 컴파일 후에, 다수의 로컬화 가능 엘리먼트들을 단일 파일로 압축하기 위한 부가적인 소프트웨어가 이용될 수 있다. 그러한 압축 소프트웨어는 보다 큰 파일들로 압축되어야 할 언어 특정적 자원들, 및 보다 큰 파일들의 아이덴터티를 지정하는 입력들을 수신할 수 있다. 게다가, 다수의 언어 특정적 자원들을 포함할 수 있고 관련 언어 독립적 코드에 의해 개개의 언어 특정적 자원들의 검색 및 액세스를 용이하게 할 수 있는 파일 포맷이 사용될 수 있다.
컴퓨터 애플리케이션, 오퍼레이팅 시스템, 자원 매니페스트, 언어 중립적 자원, 언어 특정적 자원
Description
도 1은 본 발명의 실시예들이 구현될 수 있는 예시적인 디바이스 아키텍처를 일반적으로 도시하는 블록도.
도 2는 단일 바이너리(single binary) 내에 코드 부분과 자원 부분을 갖는 기존의 애플리케이션 바이너리를 도시하는 아키텍처 다이아그램.
도 3은 애플리케이션이 개별적인 바이너리들 내에 언어 중립적 코드 바이너리 부분과 언어 의존적 자원 부분을 갖는 애플리케이션 구성을 도시하는 아키텍처 다이아그램.
도 4는 본 발명의 일 실시예에 따른 자원 압축 스킴(resource compaction scheme)에 대한 파일 포맷을 도시하는 아키텍처 다이아그램.
도 5는 본 발명의 자원 매니페스트의 예시적인 구조를 도시하는 관계도.
도 6은 언어 중립적 코드 바이너리 부분과 언어 의존적 자원 부분을 개별적인 바이너리 내에 생성하기 위한 본 발명의 일 실시예에 따른 데이터 흐름을 도시하는 개략도.
도 7은 언어 중립적 코드 바이너리 부분과 언어 의존적 자원 부분을 개별적인 바이너리 내에 생성하기 위해 본 발명의 일 실시예에 따라 취해지는 단계들을 도시하는 흐름도.
도 8은 실행 시간(run-time)에 언어 의존적 자원을 로딩하기 위한 본 발명의 일 실시예에 따른 데이터 흐름을 도시하는 개략도.
도 9는 실행 시간(run-time)에 언어 의존적 자원을 로딩하기 위해 본 발명의 일 실시예에 따라 취해지는 단계들을 도시하는 흐름도.
<도면의 주요 부분에 대한 부호의 간단한 설명>
500 : 로컬화 엘리먼트
502 : 비관리형 자원 엘리먼트
504 : 관리형 자원 엘리먼트
506 : 중립 자원 엘리먼트
508 : 로컬화 자원 엘리먼트
510 : 자원 타입 엘리먼트
본 발명은 일반적으로 컴퓨터 애플리케이션 및 오퍼레이팅 시스템에 관한 것으로, 보다 구체적으로는, 로컬화 가능한(localizable) 사용자 인터페이스(UI) 자원들과는 별도로 저장된 기능 코드 및 언어 중립적 데이터(language-neutral data)를 갖는 애플리케이션 또는 오퍼레이팅 시스템을 더욱 능률적으로 작성하고 사용하기 위한 시스템 및 방법에 관한 것이다.
컴퓨터가 전세계에 더욱 널리 보급됨에 따라서, 상이한 언어들 및/또는 지역 들에 대해 최적화되거나 로컬화된 상이한 버전의 오퍼레이팅 시스템 또는 애플리케이션들에 대한 필요성이 증가하였으며, 마찬가지로 대량의 그러한 다양한 버전들을 생성, 업데이트 및 유지하는 것과 관련한 총비용도 증가하였다. 오퍼레이팅 시스템은 일반적으로 단일의 바이너리 엔터티 내에 코드, 데이터, 및 언어 특정적(language-specific) UI 자원들을 함께 포함하기 때문에, 임의의 부분의 변경은 전체에 대한 업데이트를 필요로 한다. 따라서, 업데이트, 예를 들어 보안 패치에 따른 업데이트가 관심 있는 각 언어마다 제공되어야 한다. 이것을 "로컬화"(localization)라고 하며, 그 결과 생기는 각각의 버전을 "로컬화된"(localized) 버전이라고 한다. 변경이 필요한 대부분의 경우에, 이러한 변경은 언어 특정적 부분들에서가 아니라 코드 부분에서 생기기 때문에, 대부분의 수정(fixes), 업데이트 등의 개별적인 로컬화된 버전들을 생성하는 것은 비경제적이고 비용이 많이 든다. 더욱이, 보안 수정을 발행(issue)하는 경우와 같이 신속한 업데이트 응답이 필요할 때, 그 수정의 특정적으로 로컬화된 많은 다양한 버전들을 생성하기 위한 필요에 의해 야기되는 지연으로 인해 사용자들은 받아들이기 어려운 기간 동안 무방비로 방치될 수 있다. 흔히 그러한 상황에서는, 일반적으로 우선 순위가 높은 지역들에 대한 로컬화된 버전들이 먼저 생성되기 때문에 우선 순위가 낮은 지역들에 있는 사용자들이 그 지연의 대부분(brunt)을 감당하게 된다.
하나의 해법은 언어 독립적 코드 및 데이터를 언어 특정적 데이터로부터 분리시킴으로써 보안 패치 등을 포함하는 변경들이 언어 독립적 코드 및 데이터에 대해서만 행해질 수 있도록 하는 것이다. 그러한 방법으로, 단일 보안 패치가 신속 하고도 능률적으로 개발되어 전세계에 배포될 수 있고, 그럼에도 오퍼레이팅 시스템 및 애플리케이션들의 로컬화된 버전들의 제작은 변하지 않게 될 것이다. 그러한 해법은 2003년 5월 12일에 출원된 미국 출원번호 제10/435,848호[발명의 명칭: "Bifurcated Operating System Having a Language Neutral Component"]에 더욱 상세히 기술되어 있으며, 그 개시 내용 전체가 본 명세서에 참고로 합체된다.
유감스럽게도, 분리된 언어 중립적 컴포넌트들과 언어 특정적 컴포넌트들을 제공하는 해법에 따르면 비교적 적은 수의 시장들에 대해서 로컬화되고 있을 뿐인 비교적 간단한 애플리케이션들에 대해서조차 수습 불가능할 정도로 많은 수의 파일들을 신속히 생성하는 결과가 초래될 수 있다. 대략 500개의 컴포넌트 파일들을 갖는 간단한 애플리케이션조차 단지 그 애플리케이션을 유럽 시장에 대해 로컬화하기 위하여 5000개 이상의 대응하는 언어 특정적 컴포넌트 파일들을 필요로 할 수 있다. 그러한 많은 수의 파일들은 새로운 버전 또는 패치들이 능률적으로 컴파일되고 배포될 수 있는 능력을 현저히 감소시킨다. 게다가, 더욱 중요하게는, 많은 수의 파일들은 2개 이상의 파일들, 즉 언어 중립적 파일 및 하나 이상의 언어 특정적 파일들이 로딩되도록 요구함으로써 애플리케이션 또는 오퍼레이팅 시스템의 성능에 악영향을 미칠 수 있다. 더욱이, 많은 수의 파일들을 보안 침해나 다른 악성 코드들로부터 보호하기 위하여 부가적인 자원들이 소비되어야 한다. 마지막으로, 많은 최신의 오퍼레이팅 시스템들은 64 킬로바이트 입도(granularity)의 가상 메모리 및 4 킬로바이트 입도의 물리적 메모리를 할당하기 때문에, 64 킬로바이트보다 작은 다수의 파일들을 로딩하는 것은 가상 메모리를 낭비하고 여러 조각으로 분해 하게 될 것이다. 4 킬로바이트보다 작은 파일들은 가상 메모리와 물리적 메모리 양쪽 모두에 영향을 미칠 것이기 때문에 더욱 부정적인 영향을 미칠 것이다. 오퍼레이팅 시스템이 사이즈가 4 킬로바이트 미만인 무시할 수 없는(non-trivial) 양(즉, 400개보다 많은)의 파일들을 갖게 되는 것은 드문 일이 아니다.
본 발명의 실시예들은, 코드 및 로컬화 불가능한 데이터에 관련한 언어 중립적 부분 및 상기 애플리케이션 또는 오퍼레이팅 시스템에 의해 이용되거나 또는 그에 의해 이용 가능하게 되는 로컬화 가능한 자원들에 관련된 언어 특정적 부분을 갖는 애플리케이션 또는 오퍼레이팅 시스템 및 그에 대한 "수정들"(예를 들면, 상기 애플리케이션 또는 오퍼레이팅 시스템의 출시(release) 후에 배포된 패치들 및 업데이트들)을 고려한다. 언어 특정적 부분들에 대응하는 파일들의 수를 최소화하기 위하여, 다수의 언어 특정적 부분들은 단일 파일 구조로부터 저장되어 액세스될 수 있다.
일 실시예에서는, 다수의 언어 특정적 컴포넌트들을 단일 바이너리 파일로 결합하기 위한 자원 툴(resource tool)이 제공된다. 이 자원 툴은 어느 언어 특정적 컴포넌트들이 단일 파일로 결합되어야 하는지를 지정하는 구성 입력을 수용할 수 있고, 적당한 결합 파일을 생성할 수 있다.
다른 실시예에서는, 다수의 언어 특정적 컴포넌트들을 단일 바이너리 파일로 결합하기 위한 파일 포맷이 제공된다. 이 파일 포맷은 개개의 언어 특정적 컴포넌트들에 대한 액세스를 제공하고 그 언어 특정적 컴포넌트들 각각의 무결성 (integrity)을 유지할 수 있다.
또 다른 실시예에서는, 언어 특정적 자원들을 이용할 수 있는 코드가, 적당한 파일을 위치 지정(locate)하는 것과 그 파일 내의 적당한 자원 위치를 위치 지정하는 것을 포함하여, 적당한 자원들을 위치 지정할 수 있도록 언어 특정적 자원 위치 지정 서비스들을 제공하기 위한 매니페스트(manifest)가 구성된다. 게다가, 이 매니페스트는 개발자들에게 어느 자원들이 로컬화될 수 있고 어느 것이 언어 중립적인 채로 있어야 하는지를 결정하고 기록할 기회를 제공할 수 있다. 자원 로딩은 본 발명의 일 실시예에서 자원들을 위치 지정하고 그 자원들을 로딩할 때 상기 매니페스트를 이용하도록 구성된다.
또 다른 실시예에서는, 워싱턴주 레드몬드 소재의 마이크로소프트사에 의해 출시된 윈도즈 리소스 컴파일러(Windows Resource Complier)(RC.EXE)와 같은 컴파일러가 매니페스트 정보를 판독하고 그에 따라서 언어 중립적 자원들 및 언어 특정적 자원들을 개별적인 자원 파일들, 예를 들면 .res 파일들로 컴파일하도록 업데이트된다. 이 방법으로, 링커(linker)는 상기 언어 중립적 자원들 및 언어 특정적 자원들을 개별적인 PE 바이너리들 - 이 중 하나는 언어 중립적 데이터 및 기능 코드에 대한 바이너리이고 다른 하나는 로컬화 가능 자원들에 대한 바이너리임 - 로 링크할 수 있다. 그후 로컬화 가능 자원들은 단일 또는 다수의 파일들로 더 결합될 수 있어서, 파일 관리 서비스 및 운영의 능률이 증대된다.
비록 여기서의 설명은 주로 두 갈래 분기형(bifurcated) 오퍼레이팅 시스템의 생성 및 이용에 집중하지만, 여기서 설명된 두 갈래 분기(bifurcation)에 대한 다수의 원리 및 이익들은 오퍼레이팅 시스템이 아닌 애플리케이션들에도 마찬가지로 적용된다는 것을 알 것이다. 따라서, 본 발명의 또 다른 실시예들에서는, 사실상 언어 중립적 부분 및 로컬화 가능 부분을 갖는 두 갈래 분기형 애플리케이션이 고려된다. 본 발명의 부가적인 특징들 및 이점들은 첨부 도면들을 참조하여 설명되는 예시적인 실시예들에 대한 이하의 상세한 설명으로부터 명백해질 것이다.
첨부된 특허청구범위는 본 발명의 특징들을 특정하게 제시하지만, 본 발명은, 그 목적 및 이점들과 더불어, 첨부된 도면과 관련하여 설명된 이하의 상세한 설명으로부터 가장 잘 이해될 수 있다.
오퍼레이팅 시스템 또는 애플리케이션과 함께 배포되고 이들에 의해 언어 특정적 기능을 제공하는 데에 이용되는 개개의 언어 특정적 파일들의 양을 최소화하기 위해 다수의 엘리먼트들이 이용될 수 있다. 처음에는, 언어 특정적일 수 있는 데이터에 관한 판정이 행해질 수 있다. 예를 들면, 사용자에게 제시되는 대화 상자들은 언어 특정적일 수 있고, 메뉴 선택, 또는 철자 체크 옵션들도 마찬가지일 수 있다. 그러한 판정은 언어 특정적 데이터 및 언어 중립적 코드 및 데이터와 함께 컴파일 단계(compilation stage)의 일부로서 하나 이상의 객체 파일들 및 자원들로 컴파일될 수 있는 매니페스트(manifest) 내에 문서화(document)될 수 있다.
컴파일 단계 후에 객체 파일들 및 자원들은 링킹 툴(linking tool)에 의하여 함께 링크되어 언어 특정적 자원들 및 정보를 포함하는 개개의 자원 파일들 및 이식 가능한(portable) 실행 가능 파일들을 생성할 수 있다. 자원 툴은 개개의 언어 특정적 자원들이 언어 중립적 코드 파일들 및 실행 가능 파일들에 의해 여전히 참조될 수 있는 방식으로 다수의 언어 특정적 파일들을 하나 이상의 보다 큰 파일들로 결합할 수 있다. 자원 툴은 또한 결합되어야 할 정확한 언어 특정적 파일들을 지정(specify)할 수 있고, 결과로서 생기는 보다 큰 파일 또는 파일들을 식별할 수 있는 외부 입력들을 수신할 수 있다.
각종 언어 특정적 파일들이 단일 파일로 압축될 수 있는 방법은 자원 컴파일러에 대한 변경들과 같은 컴파일 단계에 대한 변경들을 포함할 수 있고, 압축 애플리케이션과 같은 부가적인 소프트웨어의 사용을 포함할 수 있다. 여기서, 상기 압축 애플리케이션은 지정된 언어 특정적 컴포넌트들을 사전 정의된 구조를 이용하여 단일 파일로 압축하고, 상기 사전 정의된 구조는 언어 중립적 코드 및 데이터가 현재 압축된 언어 특정적 파일들을 여전히 참조할 수 있게 하도록 설계된다. 각종 언어 특정적 파일들이 단일 파일로 압축될 수 있는 방법은 또한, 언어 특정적 컴포넌트들이 단일 파일로 결합될 것인지 여부를 포함하여, 언어 중립적 코드 및 데이터와 언어 특정적 컴포넌트들 간의 관계를 지정하는 자원 매니페스트들에 대한 참조들을 포함할 수 있다.
이하의 설명은 컴퓨팅 환경과, 코드와 데이터를 언어 중립적 및 언어 특정적 컴포넌트들로 분할하는 것과, 다수의 언어 특정적 파일들을 단일 파일로 압축하는 것과, 각종 메커니즘에 의해 이용되는 자원 매니페스트에 대한 설명을 포함하여, 그러한 압축을 가능하게 하기 위해 이들 각종 메커니즘에 제공되는 정보와 관련하여 더욱 상세한 설명을 제공할 것이다.
컴퓨팅
환경
유사한 참조 번호들이 유사한 엘리먼트들을 가리키는 도면들을 참조하면, 본 발명은 적당한 컴퓨팅 환경에서 구현되는 것으로 예시되어 있다. 요구 사항은 아니지만, 본 발명은 프로그램 모듈들과 같이 퍼스널 컴퓨터에 의해 실행되는 컴퓨터 실행 가능 명령들의 일반적 맥락에서 설명될 것이다. 일반적으로, 프로그램 모듈들은 특정 태스크를 수행하거나 또는 특정 요약(abstract) 데이터 타입들을 구현하는 루틴, 프로그램, 객체, 컴포넌트, 데이터 구조 등을 포함한다. 또한, 당업자라면 본 발명이 핸드헬드 디바이스, 멀티 프로세서 시스템, 마이크로프로세서 기반 또는 프로그램 가능한 소비자 전자 기기, 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터 등을 포함하는 다른 컴퓨터 시스템을 이용하여 실시될 수도 있다는 것을 알 것이다. 본 발명은 통신 네트워크를 통하여 링크되어 있는 원격 프로세싱 디바이스들에 의해 태스크들이 수행되는 분산 컴퓨팅 환경에서 실시될 수도 있다. 분산 컴퓨팅 환경에서, 프로그램 모듈들은 로컬 메모리 기억 디바이스 및 원격 메모리 기억 디바이스 양쪽 모두에 위치할 수 있다.
이 설명은 본 발명을 구현하기 위한 예시적 시스템에서 이용될 수 있는 범용 컴퓨팅 디바이스에 대한 설명에서 시작하고, 그 후 본 발명은 도 2 및 후속 도면들을 참조하여 더욱 상세히 설명될 것이다. 이제 도 1을 참조하면, 프로세싱 유닛(21), 시스템 메모리(22), 및 이 시스템 메모리(22)를 포함하는 각종 시스템 컴포넌트들을 상기 프로세싱 유닛(21)에 결합하는 시스템 버스(23)를 포함하는 종래의 퍼스널 컴퓨터(20)의 형태로 범용 컴퓨팅 디바이스가 도시되어 있다. 시스템 버스 (23)는 메모리 버스 또는 메모리 제어기, 주변 버스, 및 각종 버스 아키텍처 중 어느 하나를 이용한 로컬 버스를 포함하는 몇몇 타입의 버스 구조들 중 어느 하나일 수 있다. 시스템 메모리는 판독 전용 메모리(ROM)(24) 및 랜덤 액세스 메모리(RAM)(25)를 포함한다. 스타트 업(start-up) 중과 같이 퍼스널 컴퓨터(20) 내의 엘리먼트들 간의 정보 전송을 돕는 기본 루틴들을 포함하는 기본 입출력 시스템(BIOS)(26)은 ROM(24)에 저장된다. 퍼스널 컴퓨터(20)는 또한 하드 디스크(60)로부터 판독하고 거기에 기록하기 위한 하드 디스크 드라이브(27), 탈착 가능한 자기 디스크(29)로부터 판독하거나 거기에 기록하기 위한 자기 디스크 드라이브(28), 및 CD ROM 또는 다른 광학 매체와 같은 탈착 가능한 광 디스크(31)로부터 판독하거나 거기에 기록하기 위한 광 디스크 드라이브(30)를 포함한다.
하드 디스크 드라이브(27), 자기 디스크 드라이브(28), 및 광 디스크 드라이브(30)는 각각 하드 디스크 드라이브 인터페이스(32), 자기 디스크 드라이브 인터페이스(33)), 및 광 디스크 드라이브 인터페이스(34)에 의해 시스템 버스(23)에 접속된다. 이 드라이브들과 그들의 관련 컴퓨터 판독 가능 매체는 컴퓨터 판독 가능 명령, 데이터 구조, 프로그램 모듈 및 퍼스널 컴퓨터(20)용의 다른 데이터의 불휘발성 기억을 제공한다. 여기서 설명된 예시적 환경은 하드 디스크(60), 탈착 가능한 자기 디스크(29), 및 탈착 가능한 광 디스크(31)를 채용하지만, 당업자라면 자기 카세트, 플래시 메모리 카드, 디지털 비디오 디스크, 베르누이 카트리지, 랜덤 액세스 메모리, 판독 전용 메모리, 기억 장소 구역 네트워크(storage area network) 등과 같이, 컴퓨터에 의해 액세스 가능한 데이터를 저장할 수 있는 다른 타입의 컴퓨터 판독 매체도 이 예시적 동작 환경에서 사용될 수 있다는 것을 알 것이다.
하드 디스크(60), 자기 디스크(29), 광 디스크(31), ROM(24) 또는 RAM(25) 상에는, 오퍼레이팅 시스템(35), 하나 이상의 애플리케이션 프로그램(36), 다른 프로그램 모듈들(37), 및 프로그램 데이터(38)를 포함하는, 다수의 프로그램 모듈들이 저장될 수 있다. 사용자는 키보드(40) 및 포인팅 디바이스(42)와 같은 입력 디바이스들을 통하여 퍼스널 컴퓨터(20)에 커맨드 및 정보를 입력할 수 있다. (도시되지 않은) 다른 입력 디바이스들은 마이크, 조이스틱, 게임 패드, 위성 접시형 안테나(satellite dish), 스캐너, 또는 그런 종류의 다른 것을 포함할 수 있다. 이들 및 다른 입력 디바이스들은 흔히 시스템 버스에 결합되어 있는 직렬 포트 인터페이스(46)를 통하여 프로세싱 유닛(21)에 접속되지만, 병렬 포트, 게임 포트 또는 유니버설 시리얼 버스(USB) 또는 네트워크 인터페이스 카드와 같은 다른 인터페이스들에 의해 접속될 수도 있다. 모니터(47) 또는 다른 종류의 디스플레이 디바이스도 비디오 어댑터(48)와 같은 인터페이스를 통하여 시스템 버스(23)에 접속된다. 모니터 이외에, 퍼스널 컴퓨터는 일반적으로 스피커 및 프린터와 같은 도시되지 않은 다른 주변 출력 디바이스들을 포함한다.
퍼스널 컴퓨터(20)는 원격 컴퓨터(49)와 같은 하나 이상의 원격 컴퓨터들에의 논리적 접속을 이용하는 네트워킹된 환경에서 동작할 수도 있다. 원격 컴퓨터(49)는 또 다른 퍼스널 컴퓨터, 서버, 라우터, 네트워크 PC, 피어 디바이스(peer device) 또는 다른 공통 네트워크 노드일 수 있고, 도 1에는 메모리 기억 디바이스 (50)만이 예시되어 있지만, 일반적으로 퍼스널 컴퓨터(20)와 관련하여 상술한 엘리먼트들 중의 다수 또는 전부를 포함한다. 도 1에 도시된 논리적 접속은 로컬 에어리어 네트워크(근거리 통신망)(LAN)(51) 및 와이드 에어리어 네트워크(광역 통신망)(WAN)(52)를 포함한다. 그러한 네트워킹 환경들은 사무실, 전사적(enterprise-wise) 컴퓨터 네트워크, 인트라넷 및 인터넷에서 흔한 것이다.
LAN 네트워킹 환경에서 사용될 때, 퍼스널 컴퓨터(20)는 네트워크 인터페이스 또는 어댑터(53)를 통하여 로컬 네트워크(51)에 접속된다. WAN 네트워킹 환경에서 사용될 때, 퍼스널 컴퓨터(20)는 일반적으로 모뎀(54)이나 WAN(52)을 통하여 통신을 설정하기 위한 다른 수단을 포함한다. 내부에 있거나(내장형) 또는 외부에 있을(외장형) 수 있는 모뎀(54)은 직렬 포트 인터페이스(46)를 통하여 시스템 버스(23)에 접속된다. 퍼스널 컴퓨터(20)와 관련하여 도시된 프로그램 모듈들, 또는 그것들의 일부는, 원격 메모리 기억 디바이스(만일 그런 것이 있다면)에 저장될 수 있다. 도시된 네트워크 접속들은 예시적인 것이고 컴퓨터들 간에 통신 링크를 설정하는 다른 수단이 사용될 수도 있다는 것을 알 것이다.
이하의 설명에서, 본 발명은, 달리 지적되지 않는 한, 하나 이상의 컴퓨터에 의해 수행되는 동작들(acts) 및 기호적 표현의 오퍼레이션들과 관련하여 설명될 것이다. 그러므로, 때때로 컴퓨터 실행 중인 것으로 불릴 수 있는, 그러한 동작들 및 오퍼레이션들은, 구조화된 형식으로 데이터를 표현하는 전기 신호에 대한 컴퓨터의 프로세싱 유닛의 조작(manipulation)을 포함한다. 이 조작은 데이터를 변환하거나 또는 그것을 컴퓨터의 메모리 시스템 내의 기억 장소(locations)에 유지하 고, 이것은 당업자가 잘 이해할 수 있는 방식으로 컴퓨터의 오퍼레이션을 재구성하거나 또는 다른 방법으로 변경한다. 데이터가 유지되는 곳의 데이터 구조들은 데이터의 포맷에 의해 정의된 특정 특성들을 갖는 메모리의 물리적 기억 장소들이다. 그러나, 본 발명은 전술한 맥락에서 설명되지만, 그것은 제한하기 위해 의도된 것은 아니다. 왜냐하면 당업자라면 이하에서 설명되는 각종 동작들 및 오퍼레이션들은 하드웨어로 구현될 수도 있다는 것을 알 것이기 때문이다. 또한, 여기서의 설명은 주로 두 갈래 분기형 오퍼레이팅 시스템(bifurcated operating system)의 생성 및 사용에 집중하지만, 여기서 설명된 두 갈래 분기(bifurcation)는 애플리케이션들에도 마찬가지로 적용된다.
언어 의존적 데이터의 분리
도 2를 참조하면, 기존 애플리케이션의 일 예를 예시하는 아키텍처 다이아그램이 도시되어 있다. 특히, 예시된 애플리케이션(201)은 코드 부분(203)과 자원 부분(205)을 포함하는 혼합된 단일 바이너리이다. 그러한 종래의 아키텍처는 코드 부분(203) 또는 자원 부분(205)에 대한 업데이트 중에 곤란을 초래한다. 특히, 코드 부분(203)은 일반적으로 언어 중립적인데 반해 자원 부분(205)은 일반적으로 대부분 언어 특정적이다. 애플리케이션의 출시 이후의 대부분의 업데이터는 자원 부분(205)보다는 애플리케이션의 코드 부분(203)의 수정 및 패치에 관련된다. 따라서, 코드 부분(203) 및 자원 부분(205) 양쪽 모두는 출시 이전에 실질적으로 변경될 수 있지만, 출시 이후에 그것들은 상당히 상이한 각각의 빈도수로 변경된다.
그러나, 종래 아키텍처의 예에서는, 코드 부분(203)에 대한 변경이 다음과 같이 코드 부분(203) 및 자원 부분(205) 양쪽 모두에 관련된 변경 및 재설치를 필요로 하였다. 우선, 코드 부분의 기초를 이루는 소스 코드에 대한 적당한 변경이 행해진다. 다음으로, 새로운 소스 코드 및 기존 자원들이 결합되어 원하는 수정을 구현하는 새로운 단일 바이너리를 생성하게 된다. 각각의 언어 특정적 버전의 자원들마다, 이런 식으로 새로운 바이너리 파일이 생성되어야 한다는 점에 주의해야 한다. 다음으로, 로컬화된 바이너리들이 적당한 각각의 지역들로 배포된다. 다수의 언어를 사용하는 회사나 엔터티의 경우, 다수의 개별적인 바이너리들은 일반적으로 이 단계에서 얻어질 것이다. 마지막으로, 업데이트된 바이너리들이 수정을 필요로 하는 (상기 퍼스널 컴퓨터(20) 또는 다른 컴퓨팅 디바이스와 같은) 기계들 상에 설치된다. 다수의 언어를 사용하는 장소들에서는, 각 기계마다 적당한 언어 수정이 설치되어야 한다.
도 3을 참조하면, 본 발명의 일 실시예에 따른 두 갈래 분기형 애플리케이션 아키텍처가 도시되어 있다. 특히, 2개의 개별적인 바이너리, 즉 코드 및 언어 중립적 데이터를 포함하는 언어 중립적 바이너리(303), 및 로컬화된 또는 언어 특정적 바이너리들(305) 중 하나를 포함하는 애플리케이션(301)이 도시되어 있다. 언어 중립적 바이너리(303)는 로컬화 가능한 자료, 예를 들면 해당 애플리케이션의 하나의 언어 버전으로부터 다음 언어 버전으로 변환될 필요가 없는 자료를 포함한다. 언어 특정적 바이너리(305)는 로컬화되어 있는 자료를 포함한다. 즉, 그것은 특정 언어로 표시하도록 개작되어 있다. 전형적으로 로컬화 가능한 자료의 몇 가지 예를 들면, UI 텍스트와 그래픽 및 애플리케이션 도움말 문서화가 있다.
예시된 예에서, 언어 특정적 바이너리(305)는 미국 영어(307), 일어(309), 및 불어(311)에 대응하는 다중 자원 팩들(307, 309, 311)을 포함하는 것으로 도시되어 있다. 이것은 본 발명의 실시예에 따른 것이지만, 본 발명의 실시예들에서는 애플리케이션과 함께 사용자 또는 구매자의 언어이거나 또는 그렇지 않으면 선택된 언어에 부합되는 단 하나의 자원 팩만이 제공되는 것도 고려된다. 예시된 특정 자원 팩들(영어, 일어, 및 불어)은 단지 예시적인 것일 뿐이며, 도 3에 특정하게 도시된 것들 이외에 흥미있는 임의의 언어로 자원 팩이 제공될 수도 있다는 것을 알 것이다. 로컬화 가능 자원과 로컬화 불가능 자원 간에 예시된 분리는 바람직하게는 시스템 PE 바이너리들(DLL, EXE, OCX, SYS 등)에서만 구현되는 것이 아니라, 임의의 데이터 또는 다른 형태의 바이너리들, 예를 들면 XML 데이터 또는 HTML 데이터에서도 구현된다.
도 3의 아키텍처는, 설치될 경우, 본 발명의 실시예에 따라서, 오퍼레이팅 시스템에 의해 적당한 자원들의 위치 지정(location)을 용이하게 하는 매니페스트 또는 다른 레코드(313)를 포함한다. 특히, 매니페스트는 검색되어야 할 자원의 식별자를 적당한 자원 팩 내의 그 자원의 위치에 매핑함으로써 로컬화를 가능케 한다. 예를 들면, 애플리케이션이 존재하는 기계는 일어 사용자에 의해 사용될 수 있고, 따라서 일어 자원 팩을 가질 수 있다. 바람직하게는, 시스템 설정이 다수의 자원 팩들이 존재할 경우 어느 자원 팩이 이용되어야 할지를 지시한다. 대화 상자와 같은 자원이 검색될 경우, 애플리케이션(301)의 코드 부분(303)의 인스턴시에이션(instantiation)이 원하는 대화 상자와 관련된 식별자를 갖는 매니페스트(313)를 제어하는 코드를 호출한다. 매니페스트를 제어하는 코드는 그 자원을 위치 지정한 후에 호출을 전송하거나 혹은 그 대신에 호출 엔터티에 그 위치의 표시를 리턴할 수 있다.
다수의 언어 특정적 파일들의 압축
도 1에 도시된 컴퓨팅 시스템(20)과 같은 시스템 상에, 도 3에 도시된 애플리케이션(301)과 같은 다수의 애플리케이션을 설치할 경우 언어 특정적 바이너리 파일들(305)과 같은 막대한 수의 언어 특정적 파일들이 생기는 결과를 초래할 수 있다. 이 다수의 파일들은 애플리케이션이 인스턴시에이트(instantiate)될 때마다 다수의 파일 입출력 오퍼레이션들을 필요로 함으로써 컴퓨팅 시스템(20)의 성능을 저하시킬 수 있다. 당업자들이 알고 있는 바와 같이, I/O 오퍼레이션들은 가속하기가 곤란하기 때문에, 컴퓨팅 시스템의 능률을 증가시키기 위해 가장 존속 가능한 옵션으로서 실행되는 I/O 오퍼레이션들의 수가 감소된다. 또한, 언어 특정적 바이너리 파일들(305)은 일반적으로 작고, 흔히 사이즈가 64 킬로바이트 미만이다. 따라서, 다수의 최신 오퍼레이팅 시스템들은 64 킬로바이트 증분(increments)으로 가상 메모리를 보유하기 때문에, 언어 특정적 바이너리 파일들(305)의 로딩으로 인한 메모리 사용은 언어 특정적 바이너리 파일들의 총 사이즈보다 상당히 클 수 있다. 왜냐하면 각 파일은 그 파일 자체보다 훨씬 클 수 있는 메모리 세그먼트에 로딩되기 때문이다. 시스템에서 개방(open)된 각각의 파일은 다른 자원들과 함께 시스템 파일 핸들을 취하므로, 애플리케이션에서 너무 많은 파일들이 개방될 경우 시스템 성능이 저하될 뿐만 아니라 시스템 전체 자원 소비가 증가되는 결과를 초래할 수 있다.
알 수 있듯이, 하나 이상의 언어 특정적 바이너리 파일들(305)이 단일 파일로 압축될 경우 저감된 메모리 사용 및 저감된 파일 I/O 오퍼레이션에 따른 능률이 실현될 수 있다. 도 4를 참조하면, 2개의 자원 파일, 즉 자원 파일 A(409) 및 자원 파일 B(411)를 포함하는 압축 자원 파일(401)이 도시되어 있다. 자원 파일들 A 및 B는 미국 영어 자원 팩(407) 및 일어 자원 팩(409)과 같은 언어 특정적 바이너리 파일들(305) 중 어느 하나일 수 있거나, 또는 그것들은 다수의 애플리케이션들에 대응하는 언어 특정적 바이너리 파일들일 수 있고, 여기서 파일(401)과 같은 단일 파일로 압축되는 각각의 언어 특정적 파일은 특정 언어에 대응한다. 정해진 사용자는 주로 하나의 언어만을 사용할 가능성이 있기 때문에, 만일 압축 언어 특정적 바이너리 파일들이 모두 동일 언어에 대한 것이고, 모두 서로 다른 애플리케이션에 대응한다면 다수의 파일 I/O 오퍼레이션이 제거될 수 있다. 따라서, 이하에서 더 설명되는 바와 같이, 만일 2 이상의 서로 다른 애플리케이션들에 대한 언어 특정적 자원들이 동일 파일에 포함된다면, 그 파일은 한 번만 로드되면 되므로, 하나 이상의 파일 I/O 오퍼레이션이 절약된다.
압축 자원 파일(401)은 전체로서 그 압축 자원 파일(401)에 관련된 정보를 제공할 수 있는 압축 자원 파일 헤더(403)를 포함할 수 있다. 예를 들면, 헤더(403)는 압축 자원 파일(401)이 사실상 그러한 파일이라는 것을 검증하기 위해 사용될 수 있는 서명을 포함할 수 있다. 그러한 서명은 파일(401)이 언어 특정적 바이너리 파일들을 포함하는 것으로 식별하기 위한 문자열로 시작하여, 그 다음에 각 각의 압축 자원 파일을 고유하게 식별하기 위한 글로벌 식별자가 뒤를 잇는다. 압축 자원 파일 헤더(403)는 또한 압축 자원 파일에 포함된 자원 파일들의 수를 지정하는 엔트리를 포함할 수 있다. 선택적으로, 헤더(403)는 압축 자원 파일 내의 해당 자원 파일의 시작을 고유하게 식별하기 위해 각 자원 파일에 대한 오프셋 어드레스를 지정할 수도 있다. 예를 들면, 헤더(403)는 2개의 자원 파일, 즉 자원 파일 A(409) 및 자원 파일 B(411)가 압축 자원 파일(401) 내에 포함되는 것을 지정하는 엔트리를 포함할 수 있고, 헤더(403)는 또한 자원 파일 A(409)가 파일(401)의 시작(beginning)으로부터 512 바이트의 메모리 위치에서 시작하고, 자원 파일 B(411)가 파일(401)의 시작으로부터 8096 바이트의 메모리 위치에서 시작하는 것을 지정할 수 있다. 대안적으로, 헤더(403)에 포함된 개개의 자원 어드레스들은 실제 메모리 오프셋 식별자가 아니라, 포함된 자원 파일(409 및 411)의 시작에 대한 임의 타입의 인덱스일 수 있다. 압축 자원 파일 헤더(403)는 또한, 헤더(403)를 판독하거나 또는 압축 자원 파일(401)을 메모리에 로딩할 때 다른 프로세스들을 돕기 위하여 헤더(403)의 사이즈 및 압축 자원 파일(401)의 사이즈를 지정할 수 있다.
압축 자원 파일(401) 내에 포함되는 각각의 자원 파일은 그 자원 파일에 관한 관련 정보를 제공하기 위하여 그 자신의 헤더를 가질 수 있다. 이 헤더 정보는, 도 4에 도시된 바와 같이, 압축 자원 파일(401) 내의 압축 자원 파일 헤더(403)의 바로 다음에 올 수 있다. 자원 파일 A 헤더(405) 및 자원 파일 B 헤더(407)와 같은, 도 4에서의 자원 파일 헤더들은 파일(401)의 로딩을 용이하게 하기 위해 서로 인접하여 위치한다 대체 실시예에서, 헤더들(405 및 407)은 파일들(409 및 411)과 같은 그들의 각각의 자원 파일들에 인접하여 위치할 수 있다. 자원 파일 헤더들은 그들의 각각의 자원 파일들의 파일명을 포함할 수 있고, 또한 로딩 소프트웨어가 적당한 자원이 로딩되고 있음을 보증할 수 있도록 하는 정보를 제공하기 위해 체크섬(checksum) 및 자원 파일의 버전을 포함할 수도 있다. 바람직한 일 실시예에서, 체크섬은 MD5 자원 체크섬이다. 자원 파일 헤더는 또한 자원 파일 헤더를 판독하거나 또는 자원 파일을 메모리에 로딩할 때 다른 프로세스들을 돕기 위하여 헤더의 사이즈 및 자원 파일의 사이즈를 지정할 수 있다.
압축 자원 파일(401) 내의, 자원 파일(409)과 같은 자원 파일의 위치가 압축 자원 파일 헤더(403)에 지정되지 않았다면, 헤더(405)와 같은 자원 파일 헤더는 그것이 관계하는 개개의 자원 파일의 위치를 포함할 수 있다. 또한, 상기와 같이, 위치 정보는 예를 들어 파일(401)의 시작으로부터의 실제 메모리 오프셋일 수 있고, 또는 자원 파일에 대한 임의의 다른 인덱스일 수 있다. 어떤 오퍼레이팅 시스템 또는 다른 로딩 메커니즘들은 자원의 시작 메모리 어드레스가 짝수일 것을 필요로 할 수 있으므로, 자원들 사이에, 예를 들면 자원 파일 A(409)와 자원 파일 B(411) 사이에 채우기(padding)가 이용될 수 있다. 그러한 경우, 헤더(405)와 같은 자원 파일 헤더는 채우기의 존재를 표시할 수 있고, 심지어는 채우기의 길이를 지정할 수도 있다.
자원 파일 A(409) 또는 자원 파일 B(411)와 같은 자원 파일은 주로 자원 데이터 자체를 포함할 수 있다. 그러나, 파일을 로딩하거나 요청하는 시스템을 돕기 위한 부가적인 정보가 자원 파일 내에 포함될 수도 있다. 예를 들면, 자원 파일은 상술한 파일(401)의 서명과 유사한 서명을 포함할 수 있다. 게다가, 자원 파일은 상술한 바와 같이 자원 헤더에 포함된 버전 정보가 요구 애플리케이션의 버전과 다른 경우 자원 파일을 검증하기 위해 사용될 수 있는 자원 체크섬을 포함할 수 있다. 자원 파일은 또한, 현재의 자원 파일이 적당한 자원 파일이 아니라고 결정될 경우, 적당한 자원을 찾는 것을 돕기 위한 정보를 포함할 수도 있다.
압축 자원 파일(401)의 아키텍처는 다수의 파일들이 단일 파일 구조 내에 포함되는 것을 허용하여, 파일 I/O 오퍼레이션의 수를 줄이고 메모리의 능률적인 이용을 증가시킨다. 함께 이용될 가능성이 가장 많은 자원 파일들이 단일 압축 자원 파일 내에 저장되는 것을 보증하기 위해 여러 전략이 이용될 수 있다. 예를 들면, 애플리케이션(301)은 보다 큰 애플리케이션의 컴포넌트일 수 있다. 그러한 경우, 애플리케이션(301)은 상기 보다 큰 애플리케이션을 포함하는 다른 컴포넌트들과 함께 인스턴시에이트될 가능성이 있다. 그러므로, 미국 영어 자원 팩(307) 및 상기 보다 큰 애플리케이션을 포함하는 다른 컴포넌트들의 미국 영어 자원 팩들을 포함하는 단일 압축 자원 파일이 메모리에 로딩될 필요가 있는 유일한 언어 특정적 자원 파일이겠지만, 그래도 다수의 컴포넌트들 각각은 그들의 각각의 언어 특정적 자원들에 액세스할 수 있을 것이다. 이와 유사하게, 애플리케이션(301)이 오퍼레이팅 시스템 파일이라면, 자원 팩(307) 및 일반적으로 애플리케이션(301)과 함께 로딩된 다른 오퍼레이팅 시스템 파일들의 대응하는 자원 팩들을 포함하는 단일 압축 자원 파일이 또한 애플리케이션(301)과 함께 로딩된 모든 오퍼레이팅 시스템 파일들에 언어 특정적 자원들을 제공하기 위해 메모리에 로딩될 필요가 있는 유일한 자 원일 것이다. 알 수 있듯이, 압축 자원 파일(401)로 압축되는 자원 파일들(409 및 411)과 같은 자원 파일들이 동일 언어에 대한 언어 특정적 파일들이라면 그리고 이들 언어 특정적 파일들이 일반적으로 함께 인스턴시에이트되거나 이용되는 컴포넌트들 및 시스템 파일들을 포함하는 애플리케이션들에 대응한다면 보다 큰 능률이 얻어질 수 있다.
다른 컴포넌트들 또는 파일들과 관계가 없을 수 있는 애플리케이션들이 존재할 수도 있고, 그 컴포넌트들 또는 파일들은 애플리케이션과 동시에 사용될 것이다. 그러한 경우, 해당 애프리케이션의 언어 특정적 자원 파일들이 개개의 파일들로서 존재하도록 허용하는 것보다는, 그러한 언어 특정적 자원 파일들은 임의의 다른 언어 특정적 자원 파일들과 압축될 수 있고, 이때 압축 자원 파일은 64 킬로바이트 또는 64 킬로바이트의 배수가 되도록 한다. 상술한 바와 같이, 오퍼레이팅 시스템들은 흔히 사이즈가 64 킬로바이트인 메모리 세그먼트들로 파일들을 로딩할 것이기 때문에, 각각 64 킬로바이트보다 작은 다수의 자원들을 64 킬로바이트 또는 그보다 약간 작은 압축 파일로 압축할 경우 어떤 부가적인 메모리 사용도 생기지 않을 것이다. 거꾸로, 압축 자원 파일이 적어도 하나의 파일 I/O 오퍼레이션을 절약할 가능성이 있다. 왜냐하면 압축 자원 파일이 메모리에 여전히 로딩되어 있는 동안 압축 자원 파일에 압축된 다른 자원이 호출될 가능성이 항상 존재하기 때문이다. 그러므로, 언어 특정적 자원 파일들과 같은 다수의 자원 파일들을 하나 또는 그 이상의 압축 자원 파일들로 압축하는 것은 일반적으로 유익하다.
자원
매니페스트
앞에서 논의한 바와 같이, 언어 중립성을 용이하게 하기 위해 외부 위성 자원 파일들에 사용자 인터페이스 자원들이 더욱 더 저장된다. 이 두 갈래 분기 저장 스킴은 외부 자원들을 위치 지정하는 복잡성을 더할 수 있고 로컬화 가능한 자원들을 식별하기 위한 필요성을 증가시킨다. 따라서, 본 발명의 또 다른 양태는 개발자들이 어떤 자원들이 어떻게 로컬화되어야 하는지를 제어할 수 있게 하는 시스템 및 방법을 개시하고 또한 자원 파일 위치, 버전, 체크섬 등에 관한 필요한 정보를 시스템에 제공한다. 그 결과, 애플리케이션 프로그램 실행 가능한 바이너리의 작성 프로세스는 정확한 언어 중립적 이미지들을 생성할 수 있고 자원 로더는 실행 시간(runtime)에서 자원들을 요구하는 모듈을 위해 외부 자원들을 능률적으로 묶을 수 있다.
프로그래밍 코드와 그것의 자원들 간에 밀접한 유대(close tie)를 생성하기 위하여, 앞에서 설명한 자원 매니페스트가 이용될 수 있다. 본 발명에서 자원 매니페스트는 컴포넌트 소유자들이 자원 버전(versioning), 파일 경로, 및 자원 타입 및 항목(item)들과 같은 자원 정보를 기술할 수 있게 하는 공공 포맷(public format)이다. 바람직한 일 실시예에서는, 선언 부분(declarative) 확장성 생성 언어(XML) 기반 스킴이 개발자들로 하여금 로컬화되거나 언어 특정적인 자원 파일 및 그것의 관련 자원 정보를 기술할 뿐만 아니라 자원 로컬화 능력(resource localizability)을 제어할 수 있게 한다. 그러면 자원 매니페스트를 자원 관리자가 컴포넌트 자원 정보를 능률적으로 그리고 정확하게 추적할 수 있게 하는 포맷으로 매입된 데이터(embedded data)로서의 바이너리들로 자원 매니페스트를 작성하기 위한 툴 및 프로세스들이 개발될 수 있다.
자원 매니페스트는 2가지 형태, 즉 소스 형태 및 바이너리 형태를 취한다. 그것의 소스 형태에서 자원 매니페스트는 컴포넌트의 소스 코드를 동반하는 XML 기반 선언 부분 소스 파일이다. 그것의 바이너리 형태에서 자원 매니페스트는 컴포넌트 바이너리의 자원 부분으로 매입될 수 있는 바이너리 포맷을 갖는 새로운 자원 타입이다. 소스 형태 관점으로부터 자원 매니페스트는 실행 시간 자원 로딩뿐만 아니라 작성 및 로컬화 프로세스에 의해 자원들이 어떻게 다루어져야 하는지에 대한 제어권을 컴포넌트 소유자에게 부여할 수 있다. 바이너리 형태 관점으로부터 자원 매니페스트는 자원 로더가 보다 직접적이고 정확한 자원 정보를 가질 수 있게 함으로써, 자원 로더에서의 여분의 자원 폴백(fallback) 검색에 대한 필요성을 줄이고 그에 의해서 전체적인 자원 로더 및 관리 성능을 향상시킨다. 자원 매니페스트는 또한 로컬화된 자원 타입, 주어진 자원 타입의 로컬화된 자원 항목, 위치, 및 자원 관리를 개선하는 언어와 같은 보다 강력한 로컬화 가능 정보를 허용한다. 그렇지만 자원 매니페스트는 소스 레벨에서 준수 사양이 아니라는 것에 주의해야 한다. 만일 소스에 자원 매니페스트가 존재하지 않으면 작성 프로세스 동안 디폴트의 것이 얻어질 수 있다.
자원 매니페스트를 이용할 경우 다수의 이점들이 제공되고, 주로 언어 독립성이 제공된다(즉, 자원 매니페스트 엘리먼트들은 로컬화 가능한 데이터 또는 속성을 포함할 필요가 없다). 또한, XML 기반 스키마를 이용할 경우 개방적이고, 능률적이며 유연성 있는 관리 및 유지보수를 제공한다, 즉 특별한 툴을 사용할 필요가 전혀 없기 때문에 개발자들은 노트패드 애플리케이션 또는 임의의 XML 에디터를 이용하여 자원 매니페스트를 쉽게 다룰 수 있다. 최대 유연성 및 능률을 갖는 매니페스트를 정의하기 위하여, 이하에서 도 5의 첨부 예시와 함께 예시적인 구조화된 XML 기반 스키마에 대해 설명한다.
<ElementType typeId="localization">
<element type="unmanagedResources" minOccurs="0" maxOccurs="1"/>
<element type="managedResources" minOccurs="0" maxOccurs="1"/>
</ElementType>
자원 매니페스트에 대한 근본 엘리먼트는 로컬화(500)이고 그것은 바람직하게는 모든 로컬화된 소스 코드 파일 및 자원 바이너리에 존재한다. 로컬화 엘리먼트는 상이한 아키텍처를 갖는 주요 자원 타입들 - 관리형(managed) 및 비관리형(unmanaged) - 을 포함한다. 소스 레벨에서 하나의 매니페스트 파일은 다수의 컴포넌트들에 의해 공유될 수 있으므로, 그것은 비관리형 및 관리형 양쪽 모두의 자원 기술(descriptions)을 포함할 수 있다. 바이너리 레벨에서 그것은 통상 비관리형이나 관리형 중 어느 한 쪽일 수 있다.
<ElementType typeId="unmanagedResources">
<attribute type="filePath" required="no"/>
<attribute type="filePathType" required="no"/>
<attribute type="applyDefaultManifest" required="no"/>
<attribute type="fileType" required="no"/>
<attribute type="cmfIndex" required="no"/>
<attribute type="cmfFileVersion" required="no"/>
<attribute type="cmfFileName" required="no"/>
<element type="neutralResources" minOccurs="0" maxOccurs="1"/>
<element type="localizedResources" minOccurs="1" maxOccurs="1"/>
</ElementType>
비관리형 자원들에 대한 마크업의 시작은 비관리형 자원(unmanagedResources)(502)이다(엘리먼트 타입 관리형 자원(504)은 관리형 자원 타입들을 위해 예비된다). 모든 비관리형 자원들이 비관리형 자원(502) 엘리먼트 아래에 기술될 수 있고 그것은 파일 경로, 폴터 타입 및 버전과 같은 기본적인 로컬화 정보를 포함한다.
파일 경로(filePath) 속성은 로컬화 파일 경로를 지정한다. 자원 로더는 디폴트 검색 로직을 수행하기 전에 이 경로를 탐색하여 로컬화 파일들을 찾을 수 있다. 파일 경로는 완전한 절대적 파일 경로이거나 또는 사전 정의된 로컬화 파일 경로와 결합된 상대적 경로일 수 있다. (예를 들면, %SystemRoot%, %windir%, %CurrentDir%, %ProgramFiles%, %multiFallback%).
파일 경로 타입(filePathType) 속성은 로컬화 파일 폴더 구성 협약(localization file folder organization convention)을 지정한다. 디렉토리 및 파일 명칭 부여 협약들이 지정된다. 디렉토리 협약의 예들은: DIR_LANG_ID(고전적 인 Win32 언어 id), DIR_LANG_NAME(ISO 639 준거 언어 명칭) 및 DIR_LANG_CULTURE(RFC1766 준거 언어 컬처(culture) 명칭)을 포함한다. 바람직한 일 실시예에서 DIR_LANG_CULTURE는 디폴트 속성이다. LANG_NAME 및 LANG_CULTURE를 선택하는 것은 로컬화된 언어 폴더들 상에서의 로컬화 파일 검색 명령을 규정한다(예를 들면, LANG_NAME이 지정될 때, English에 대해 'en-us' 전에 'en'이 검색될 것이고, 반면 LANG_CULTURE는 'en-us'를 먼저 검색할 것이다). 파일 명칭 부여 협약의 예로는 FILE_NAME_WIN32(<파일명>.<파일 확장자>.mui) 및 FILE_NAME_MANAGED(<파일명>.자원.dll)이 포함된다.
디폴트 매니페스트 적용(applyDefaultManifest) 속성은 0(아니오) 또는 1(예)의 값들을 포함한다. 바람직한 일 실시예에서 만일 디폴트 매니페스트 적용 속성이 지정되지 않으면 그 값은 1일 것이다. 그것이 1이면, 컴포넌트의 매니페스트에 지정되지 않은 자원 타입들은 디폴트 공통 자원 매니페스트 파일에 의해 구문 분석(parse)될 것이다.
파일 타입(fileType) 속성은 1(로컬화), 2(압축 로컬화 포맷), 4(시스템), 및 8(애플리케이션)의 값들을 포함할 수 있다. 시스템 파일 타입은 그 컴포넌트가 자원 언어들을 시스템 로컬화와 매치시키는 시스템 파일이라는 것을 나타낸다.
cmf파일명(cmfFileName) 속성은 압축 로컬화된 포맷 파일의 파일 명칭을 포함한다. cmf인덱스(cmfIndex) 속성은 압축 로컬화된 포맷 파일 내부의 로컬화 파일의 인덱스 값을 포함한다. cmf파일버전(cmfFileVersion) 속성은 압축 로컬화된 포맷 파일 버전을 포함한다.
중립 자원(neutralResources) 엘리먼트는 언어 중립적 바이너리에 포함될 자원 타입 정보를 포함하고 로컬화 자원(localizedResources)은 로컬화된 바이너리에 포함될 자원 타입 정보를 포함한다.
몇 개의 항목들은 주의를 요한다. 우선, 로컬화된 자원 바이너리 및 언어 중립적 코드 바이너리는 소스 레벨에서 동일한 자원 매니페스트 파일을 공유한다. 어떤 속성들 및 엘리먼트들은 하나의 바이너리에만 적용될 수 있다(예를 들면, 파일 경로 및 파일 경로 타입은 언어 중립적 바이너리에만 적용된다). 둘째로, 압축 로컬화된 포맷 파일 속성들(즉, cmf인덱스, cmf파일버전 및 cmf파일명)은 파일 타입이 CMF일 때 사용될 것이다. 바람직한 일 실시예에서 만일 파일 타입이 지정되지 않으면 디폴트 타입은 비-CMF(non-CMF)이다. 셋째로, 후 작성 프로세스(post build process)(이하에서 상세히 다루어짐)는 컴포넌트의 CMF 정보를 오버라이트(overwrite)할 수 있다. CMF 파일 버전은 로컬화된 파일 버전들과 무관할 수 있는 CMF 파일에 대한 독립형(standalone) 버전이다. 필요하다면, CMF 파일 버전은 더 나은 보안을 위하여 공개/개인(public/private) 키로 대체될 수 있다. 넷째로, 바람직한 일 실시예에서 디폴트 매니페스트 적용 속성이 1이고 디폴트 매니페스트와 컴포넌트의 매니페스트 사이에 충돌이 있는 경우에는, 컴포넌트의 매니페스트가 디폴트 매니페스트를 오버라이트할 것이다.
<ElementType typeId="neutralResources">
<attribute type="fileVer" required="no"/>
<attribute type ="checksum" required="no"/>
<element type="resourcesType" minOccurs="0" maxOccurs="*"/>
</ElementType>
<ElementType typeId="localizedResources">
<attribute type="fileVer" required="no"/>
<attribute type ="checksum" required="no"/>
<element type="resourcesType" minOccurs="0" maxOccurs="*"/>
</ElementType>
중립 자원 엘리먼트(506)는 언어 중립적 코드 바이너리 내의 자원 항목들의 기술을 시작한다. 바람직한 일 실시예에서 컴포넌트의 소스 매니페스트에서 중립 자원이 사용되지 않으면 그것의 디폴트 값은 로컬화 자원 아래에 지정되지 않은 그 밖의 자원 항목들일 것이다. 파일 버전(fileVer) 및 체크섬(checksum) 속성들은 소스 레벨에서 사용되지 않는다. 중립 바이너리들에서 중립 자원은 실재 자원 항목들을 포함할 것이므로, 파일 버전 및 체크섬 속성들은 값을 가져야 한다. 이들 값은 작성 시간(build time) 중에 로컬화 툴 또는 RC.exe 컴파일러에 의해 생성된다. 만일 중립 자원 및 로컬화 자원 아래의 자원 항목들이 서로 충돌하면 중립 자원이 더 높은 우선 순위를 갖거나 또는 에러가 발행될 것이다.
파일 버전 속성은 파일 버전을 지정한다. 로컬화 파일을 검증하기 위하여, 이 파일 버전에 의지하지만, 버전을 검색 및 로딩하는 것은 비용이 많이 들 수 있기 때문에 매니페스트에 이것을 가짐으로써 성능이 향상된다. 체크섬 속성은 MD5 종래의 로컬화 체크섬을 지정한다. 생성된 체크섬은 비관리형 자원/관리형 자원 엘리먼트들 내의 자원 타입들 중 하나에 기초한다. 이 속성은 소스 레벨 매니페스트로부터 숨겨지고 바이너리에서만 보여진다. 자원 타입(resourcesType) 엘리먼트는 자원 타입들을 지정한다.
바람직한 일 실시예에서 만일 로컬화 자원이 개발자의 소스에서 사용되면 그 값들은 로컬화 가능한 자원 타입 또는 명칭들에 대한 자원 타입으로서 존재해야 한다. 만일 로컬화 자원이 로컬화된 바이너리에서 사용되면, 그것의 값들은 로컬화된 바이너리 내의 실재 자원 항목들이다. 파일 버전 및 체크섬 속성들은 값을 가져야 한다. 이들 값은 작성 시간에서 로컬화 툴에 의해 채워진다(이하에서 상세히 다루어짐).
바람직한 일 실시예에서 만일 로컬화 자원이 개발자의 소스에서 사용되지 않고 그것이 자원 타입의 값들을 갖고 그것의 값들이 중립 자원 내의 값들과 중복되면 중립 바이너리 내의 타입으로부터의 항목들만 추출된다. 또한, 만일 개발자가 자원 매니페스트 파일을 제공하면 그것은 중립 자원 또는 로컬화 자원에서 적어도하나의 자원 타입 엘리먼트를 가져야 한다.
<ElementType typeId="resourcesType">
<attribute type="typeName" required="yes"/>
<attribute type="typeId" required="yes"/>
<attribute type="itemId" minOccurs="0" maxOccurs=1/>
<attribute type="itemName" minOccurs="0" maxOccurs=1/>
</ElementType>
자원 타입 엘리먼트는 자원 타입을 나타내고 여러 번 사용될 수 있다. 타입명(typeName) 속성은 문자열(string) 타입을 지정한다. 타입ID(typeID) 속성은 id 타입을 지정한다. 항목명(itemName) 속성은 자원 항목명 문자열들을 지정한다. 항목ID(itemID)는 자원 항목 id들을 지정한다.
타입명과 타입ID 중 하나의 엔트리만이 요구된다는 것을 주의해야 한다. 바람직한 일 실시예에서 항목명 및 항목ID가 다수의 항목을 포함하면 그것들은 스페이스 문자들에 의해 분리된다.
작성 시간(BUILD-TIME)
도 6 및 7을 참조하면, 언어 중립적 바이너리들을 작성하기 위한 프로세스가 예시되어 있다. 작성 프로세스는 단계 700에서 시작되어, 작성 유틸리티(build.exe 및 makefile.def 작성 흐름 제어 파일)에 컴포넌트 소스 파일들(600, 602, 604)을 입력한다. 단계 702에서 속행하여 작성 유틸리티(606)에 의해 이 작성이 언어 중립적인지 여부에 대한 판정이 행해진다. 바람직한 일 실시예에서 작성 유틸리티(606)는 개시된 작성 프로세스가 언어 중립적인지(즉, LANG_NEUTRAL = 1 → 언어 중립적 작성) 또는 그것이 언어 중립적이 아닌지(즉, LANG_NEUTRAL = 0 → 비-언어 중립적 작성)에 대해 나타내는 파라미터(예를 들면, 도시되지 않은 LANG_NEUTRAL)를 수용할 수 있다. 만일 언어 중립적 파라미터가 지정되지 않으면 디폴트는 비-언어 중립적 작성이다.
만일 그 작성이 언어 중립적이면 작성 프로세스는 단계 704, 706 및 708에서 속행된다. 단계 704에서 작성 유틸리티(606)는 자원 컴파일러(RC.exe)(608)를 호출한다. 다음으로, 단계 706에서 자원 컴파일러(608)는 자원 파일(.res)(610)을 생성한다. 마지막으로, 단계 708에서 작성 유틸리티(606)는 링커 유틸리티(link.exe)(614)를 호출하여 비-언어 중립적 PE 파일(616)을 생성한다.
다른 한편으로 그 작성이 언어 중립적인 것으로 지정되면 작성 프로세스는 단계 712에서 속행하여 작성 유틸리티(606)에 의해 자원 매니페스트 파일(604)이 지정되었는지 여부에 대한 판정이 행해진다. 일 실시예에서 작성 유틸리티(606)는 매니페스트(604)의 파일명을 나타내는 파라미터(예를 들면, 도시되지 않은 RC_MANIFEST)를 수용할 수 있다. 만일 그 파라미터가 지정되지 않으면 디폴트 매니페스트 파일명이 사용될 것이다. 만일 매니페스트 파일(604)이 소스들(600, 602)의 폴더에서 발견되면, 작성 프로세스는 단계 716에서 속행된다. 만일 매니페스트 파일(604)이 소스들(600, 602)의 폴더에서 발견되지 않으면, 매니페스트 파일(604)이 존재하는지를 확인하기 위해 소스 파일들(600, 602)의 부모 및 조부모 폴더가 검색될 수 있다. 만일 매니페스트 파일(604)이 발견되지 않으면, 작성 유틸리티(606)는 단계 716으로 진행하기 전에 단계 714에서 디폴트 자원 매니페스트 파일을 생성할 수 있다.
단계 716에서 속행하여 작성 유틸리티(606)는 매니페스트 파일(604)로부터 자원 타입 정보를 획득한다. 단계 718에서 작성 유틸리티(606)는, 매니페스트 파 일(604)이 그러한 자원 압축 스킴이 이용되고 있음을 나타낸다고 판정되면, 압축 자원 파일로부터 자원 파일 정보를 획득할 수 있다. 단계 720으로 진행하여 작성 유틸리티(606)는 소스 파일들(600, 602, 604)이 컴파일되고 링크되어야 할 것인지에 대해 판정을 한다.
만일 소스 파일들(600, 602, 604)이 컴파일되고 링크되어야 할 것이 아니라면(즉, 그것들이 현존하는 바이너리들이라면), 작성 유틸리티(606)는 로컬화 자원 컴파일링 툴(MUIRCT.exe)을 호출하여 중립적 및 로컬화된 PE 파일들을 생성하고, 자원 매니페스트 태그 및 체크섬을 양쪽 파일들에 삽입한다.
다른 한편으로 소스 파일들(600, 602, 604)이 컴파일되고 링크되어야 할 것이라면 작성 프로세스는 단계 724에서 속행되고 거기서 작성 유틸리티(606)는 자원 컴파일러(RC.exe)(608)를 호출한다. 일 실시예에서 자원 컴파일러(608)는 개별적인 자원(.res) 파일들(610, 612)에 컴파일될 타입/명칭을 갖는 자원들을 포함하는 매니페스트 파일(604)의 명칭을 나타내는 스위치(예를 들면, 도시되지 않은 /q manifest_file_path)를 수용하도록 변경될 수 있다. 따라서, 단계 726에서 작성 유틸리티(606)는 컴포넌트의 소스 매니페스트 파일(604)을 구문 분석하고 자원 컴파일러(RC.exe)(608)를 호출하여 로컬화 가능한 자원들을 매니페스트 파일(604) 내의 매니페스트 자원 타입/명칭 리스트에 따라서 중립적(.res)(610) 및 로컬화된(.mui.res)(612) 파일들로 분리시킬 수 있다. 또한, 자원 컴파일러(RC.exe)(608)는 매니페스트 파일(604)의 자원 엘리먼트들(506, 508) 내의 체크섬 속성을 업데이트하고 매니페스트 파일(604)을 중립적(.res)(610) 및 로컬화된(.mui.res)(612) 파 일들 양쪽 모두에 삽입한다. 마지막으로, 단계 728에서 작성 유틸리티(606)는 링커 유틸리티(linke.exe)(614)를 두 번 호출하여 2개의 개별적인 이미지들, 즉 언어 중립적 이미지(616) 및 언어 특정적 자원 이미지(618)를 작성한다.
작성 프로세스는 단계 730에서 종결되는데, 여기서 작성 유틸리티(606)는 빈 플레이스 유틸리티(binplace.exe)를 호출하여 중립적 PE(616)를 빈 폴더(bin folder)에 위치시키고 로컬화된 PE(618)를 bin\<langid> 폴더에 위치시킨다.
후 작성
(POST-BUILD)
언어 특정적 자원 파일들과 같은 다수의 개개의 자원 파일들이 후 작성 자원 툴에 의해 위에서 상세히 설명된 구조에 따라서 하나 또는 그 이상의 압축 자원 파일들로 압축될 수 있다. 그러한 자원 툴은 자원 파일들의 그룹들을 지정할 수 있는 제어 파일의 존재를 나타내는 스위치를 수용하도록 변경될 수 있는 기존의 자원 툴일 수 있고, 또는 그 자원 툴은 오직 자원 파일들을 압축하도록 설계된 새로운 자원 툴일 수 있다.
제어 파일은 함께 그룹화될 자원 파일들을 지정할 수 있고 결과로서의 압축 자원 파일을 지정할 수 있다. 일 실시예에서, 함께 그룹화될 자원 파일들 및 결과로서의 압축 자원 파일은 순서대로 배열된 n-투플(ordered n-tuple)일 수 있고, 따라서 마지막 엔트리, 또는 첫번째 엔트리가 항상 결과로서의 압축 자원 파일이고, 나머지 엔트리들은 함께 그룹화될 자원 파일들이다. 대안적으로, 제어 파일은 함께 그룹화될 자원 파일들을 지정하고 결과로서의 압축 자원 파일을 지정하기 위해 식별자들에 의지할 수 있다. 어느 경우든, 제어 파일은 단지 단순한 텍스트 파일 일 필요가 있고, 당업자에게는 명백하겠지만, 보다 복잡한 데이터 포맷이 사용될 수도 있다. 무수한 제어 파일들에 대한 필요성을 피하기 위하여, 단일 제어 파일이 자원 파일들의 다수의 그룹을 지정할 수 있는 것이 고려된다. 일 실시예에서, 제어 파일이 에러 또는 다른 이유 때문에 자원 파일들의 하나 이상의 그룹에 대한 결과로서의 압축 파일을 지정하지 않는다면, 자원 툴은 이들 자원 파일에 대한 압축 단계를 우회하여 그것들을 비압축 상태로 남겨둘 수 있다.
도 8을 참조하면, 도 3에 도시되고 위에서 상세히 설명된 애플리케이션(301)과 유사한 애플리케이션들(810 및 820)이 도시되어 있다. 애플리케이션(810 및 820)은 각각 언어 중립적 바이너리 부분(819 및 829)을 갖고, 애플리케이션(810)에 대한 언어 의존적 자원 부분들(812, 814, 816) 및 애플리케이션(820)에 대한 언어 의존적 자원 부분들(822, 824, 826)을 갖는다. 언어 의존적 자원들 각각은 또한 언어 의존적 자원(812)에 대한 헤더(811)와 같은 헤더를 포함한다. 애플리케이션들(810 및 820)은 상술한 작성 프로세스의 결과일 수 있고, 또는 그것들은 예를 들어 상이한 일단 또는 그룹의 개발자들로부터 수신될 수 있는 미지의 작성 프로세서로부터 도출된 바이너리 파일들일 수 있다.
도 8에 도시된 자원 툴(801)과 같은 자원 툴은 제어 파일(803)과 같은 제어 파일로부터 입력을 수용하여 지정된 자원들을 압축 자원 파일 포맷으로 압축할 수 있다. 예를 들면, 제어 파일(803)은 미국 영어 자원들이 하나의 압축 자원 파일로 압출되도록 애플리케이션들(810 및 820)의 언어 특정적 자원들이 결합될 수 있다는 것을 지정할 수 있다. 도 8에 도시되어 있지는 않지만, 제어 파일(803)은 또한, 예를 들어, 일본 자원들이 제2의 압축 자원 파일로 결합될 것이고, 불어 자원들이 제3의 압축 자원 파일로 결합될 것임을 지정할 수도 있다.
자원 툴은 애플리케이션들(810 및 820)의 미국 영어 자원들(812 및 822)을 각각 판독하고, 헤더들(811 및 821)을 압축 자원 파일(830)의 세그먼트들(832 및 833)로서 각각 저장할 수 있다. 미국 영어 자원들(812 및 822)로부터의 나머지 정보는 압축 자원 파일(830)의 세그먼트들(834 및 835)로서 각각 저장될 수 있다. 상술한 바와 같이, 세그먼트들(834 및 835)은 대량(bulk)의 자원 데이터 자체를 포함할 수 있다. 또한 상술한 바와 같이 만일 압축 자원 파일(830)이, 개개의 자원 파일 헤더들이 메모리 오프셋 정보, 또는 헤더(811)에서 원래 발견되지 않은 다른 정보를 포함하도록 요구하는 포맷을 사용한다면, 그러한 정보는 그것이 압축 자원 파일(830)을 생성할 때 자원 툴(801)에 의해 부가될 수 있다.
일단 자원 툴(801)이 자원들(812 및 822)에 포함된 정보에 대해 판독, 평가, 및 가능성 편집 또는 부가함으로써 세그먼트들(832, 833, 834, 및 835)을 생성하였다면, 그것은 압축 자원 파일 헤더(403)와 관련하여 위에서 설명한 정보의 일부 또는 전부를 포함하는 헤더(831)를 생성할 수 있다. 이때 자원 툴(801)은 유사한 방법을 이용하여 압축 자원 파일들을 생성할 수 있고, 이 압축 자원 파일들은, 본 예에서, 제어 파일(803)에 의해 지정된 바와 같이, 일어 자원들(814 및 824) 및 불어 자원들(816 및 826)의 압축으로부터 생기는 파일들일 수 있다. 대안적으로, 자원 툴(801)은 알려진 병렬 프로세싱 기법에 의지하여 지정된 압축 파일들 모두를 거의 동시에 생성할 수도 있다.
실행 시간
언어 특정적 자원들과 같은 자원들은 이제 단일 파일 내에 포함될 수 있기 때문에, 언어 특정적 자원과 언어 독립적 바이너리와의 사이에 더 이상 일대일 매핑이 존재하지 않는다. 언어 특정적 자원과 언어 독립적 바이너리 사이의 매핑의 결여는 언어 독립적 바이너리의 인스턴시에이션을 복잡하게 할 수 있다.
일대일 매핑이 존재하지 않을 경우 실행 시간 방법들을 보다 낫게 대비(contrast)하기 위하여, 언어 특정적 바이너리 파일들(305) 각각과 언어 중립적 바이너리(303) 사이에 일대일 매핑을 갖는 도 3에 도시된 애플리케이션(301)을 고려한다. 그러한 경우, 언어 특정적 바이너리 파일들 각각은 명칭 부여되거나, 저장되거나, 또는 그렇지 않다면 언어 중립적 바이너리 파일(303)에만 관련되는 것으로 식별될 수 있다. 예를 들면, 해당 폴더들 내에 포함된 언어 특정적 파일들의 언어들의 타이틀 또는 코드들을 지니는 일련의 폴더들이 생성될 수 있다. 따라서, 도 3에 도시된 미국 영어 자원 팩(307)과 같은 미국 영어 데이터를 포함하는 언어 특정적 바이너리 파일들 전부를 포함하게 될 "미국 영어" 또는 "0404"의 타이틀이 붙은 폴더가 존재할 수 있다. 이 예시적인 실시예에서, 폴더들 내에 포함된 언어 특정적 바이너리들 각각은 언어 중립적 바이너리에 대한 그들의 관계를 반영하도록 명칭 부여될 수 있다. 예를 들면, 언어 중립적 바이너리가 "foo.exe"로 명칭 부여되었다면, 미국 영어 언어 특정적 바이너리 파일은 "foo.mui"로 불릴 수 있고, 그것은 미국 영어 폴더에 저장될 수 있을 것이다. 그러한 경우, 언어 특정적 자원들을 위치 지정하는 것은 매우 간단하다. 왜냐하면 그것들은 사전 정의된 폴더들 내 에 포함되고 언어 중립적 바이너리에 대한 그들의 관계가 명백하도록 명칭 부여되기 때문이다.
그러나, 알 수 있듯이, 상기 프로세스는 언어 중립적 및 언어 특정적 파일들 간에 일대일 대응이 없는 상황에서는 실용적이지 않다. 따라서, 압축 자원 파일 설계와 함께 부수적이고 위에서 보다 상세히 열거된 능률들을 제공하도록 설계된 새로운 로딩 프로세스가 도 9에 예시되어 있다. 당업자라면 이해하겠지만, 도 9에 예시된 단계들은 자원들을 로딩하는 하나 이상의 컴포넌트들에 의해 수행될 수 있다. 그러한 컴포넌트들은 오퍼레이팅 시스템(35)의 일부, 애플리케이션 프로그램(36)과 같은 각종 애플리케이션 프로그램, 또는 다른 소프트웨어 또는 유틸리티들일 수 있다. 더욱이, 당업자라면 잘 알겠지만, 도 9에 도시된 단계들은 일반적으로 수행된다. 왜냐하면 인스턴시에이트되고 있거나, 또는 그렇지 않다면 메모리에 로딩되고 있는 컴포넌트가 부가적인 자원들을 필요로 하기 때문이다. 일 예로서, 애플리케이션(301)의 언어 중립적 바이너리(303)는 언어 특정적 바이너리 파일들(305) 중 적어도 하나의 존재를 필요로 할 가능성이 있다.
도 9를 참조하면, 단계 901은 자원이 요청되었고, 또한 자원 로딩 기능들이 로딩될 자원의 경로와 같은 명칭 및 위치를 결정할 수 있다는 것을 나타낸다. 위에서 상세히 설명한 바와 같이, 그러한 정보는 요청 컴포넌트와 같은 컴포넌트와 함께 저장되어 있는 매니페스트에 포함될 수 있다. 일단 로딩될 자원의 명칭 및 위치가 결정되면, 자원은 단계 903에서 로딩될 수 있고, 자원 로딩 기능들은 단계 905에서 그 자원이 독립형 파일 내에 포함되어 있는지 또는 그것이 압축 파일 내에 있어 현재 요청될 수 있거나 요청되지 않을 수 있는 부가적인 자원을 가질 가능성이 있는지를 판정할 수 있다. 로딩 기능들이 파일의 타입을 판정할 수 있는 하나의 방법은 헤더를 검사하는 것이다. 위에서 상세히 설명한 바와 같이, 압축 자원 파일 헤더는 파일의 타입을 식별하기 위해 사용될 수 있는 문자열을 갖는 서명을 포함할 수 있다. 대체 실시예에서, 예를 들면 위에서 상세히 설명한 방법으로 요청 컴포넌트와 함께 저장된 매니페스트 내에 포함된 파일명 또는 다른 식별 정보를 검사함으로써 단계 903 이전에 단계 905의 판정을 수행할 수 있다.
단계 905에서, 로딩 기능들이 요청된 자원이 압축 파일 내에 있지 않다고 판정하면, 그 자원의 로딩은 알려진 방법으로 진행될 수 있다. 예를 들면, 여전히 필요하다면, 로딩 기능들은 단계 921에 도시된 바와 같이 독립형 또는 "비압축" 파일을 위치 지정할 수 있다. 이어서, 단계 923에 도시된 바와 같이, 로딩 기능들은 상기 독립형 파일을 그 자원이 로딩되도록 요청한 프로세스의 어드레스 공간에 메모리 매핑할 수 있다. 그러한 프로세스는 언어 특정적 자원을 요청한, 바이너리(303)와 같은, 실행 언어 중립적 바이너리일 수 있다. 요청된 자원은, 일단 그것이 요청 프로세스의 어드레스 공간에 매핑되면, 단계 925에서 계속해서 로딩됨으로써, 언어 특정적 자원들과 같은 그것의 자원들을 요청 프로세스에게 제공할 수 있다.
그러나, 만일 단계 905에서 로딩 기능들이 요청된 자원이 사실상 압축 파일이라고 판정하면, 단계 907에서 로딩 기능들은 요청 자원의 버전 블록으로부터 압축된 파일 정보를 참조할 수 있다. 아래서 보다 상세히 설명되겠지만, 요청 자원 의 버전 블록 내에 포함된 정보는 압축 자원 파일 내에 정확한 자원 파일이 포함되어 있는지 여부를 판정하는 데 사용될 수 있다.
단계 909에서, 로딩 기능들은 압축 파일이 또 다른 프로세스에 의해 이미 로딩되었는지 여부를 판정할 수 있다. 위에서 상세히 설명한 바와 같이, 압축 자원 파일들을 이용함으로써 능률이 얻어질 수 있다. 왜냐하면 그러한 파일들은 파일 I/O 오퍼레이션의 수를 줄일 수 있기 때문이다. 따라서, 불필요한 파일 I/O 오퍼레이션들이 수행되지 않도록 보증하기 위해서, 로딩 기능들은 먼저 압축 자원 파일이 이미 로딩되었는지를 판정할 수 있다. 단계 909의 검사를 수행하기 위한 하나의 메커니즘은, 예를 들면 요청된 압축 파일 내에 포함된 요청된 언어 특정적 자원들의 언어 또는 언어 식별자와 함께 요청된 압축 파일의 완전한 경로 명칭으로 이루어질 수 있는 해시 키(hash key)를 이용하는 것이다. 그러한 해시 키는 이미 로딩된 압축 자원 파일의, 유사하게 얻어진 해시 키와 비교될 수 있다. 만일 그 2개의 해시 키가 동등하다면, 요청된 압축 파일은 이미 로딩된 것이다. 당업자라면 알겠지만, 요청된 압축 자원 파일이 이미 메모리에 로딩되었는지를 판정하기 위한 검사를 수행하기 위한 다수의 다른 방법들이 존재한다. 그러한 방법들은 파일의 시작 비트들, 파일 GUID들 등의 비교를 포함할 수 있고, 단계 909를 수행하기 위해 동등하게 이용될 수 있다.
만일 단계 909에서 요청된 압축 자원 파일이 이미 또 다른 프로세스에 로딩되었다고 판정하면, 로딩 기능들은 단계 915를 수행하여 요청된 자원의 오프셋 정보를 얻을 수 있고, 또한 요청된 자원의 버전 및 체크섬을 얻을 수 있다. 위에서 상세히 설명한 바와 같이, 오프셋 정보는, 자원을 요청한 코드의 일부인 매니페스트, 압축 자원 파일의 헤더, 및 개개의 자원들 자체를 포함하여, 다양한 위치들에 포함될 수 있다. 일단 오프셋 정보가 얻어지면, 로딩 기능들은 주어진 오프셋에 위치한 자원의 버전 정보 및 체크섬 정보를, 상술한 바와 같이, 매니페스트에 저장될 수 있는, 요청된 버전 및 요청된 체크섬과 비교할 수 있다.
만일 단계 917에서 주어진 오프셋에 위치한 자원의 버전 정보 및 체크섬 정보가 요청된 버전 및 요청된 체크섬과 일치하지 않는다고 판정되면, 로딩 기능들은 단계 921로 되돌아갈 수 있고, 이 단계 921은 상술한 바와 같이 요청된 자원이 압축 파일에 있지 않다고 판정되면 수행될 수 있다. 따라서, 버전과 체크섬 정보의 어느 한쪽 또는 양쪽 모두 일치하지 않을 경우, 로딩 기능들이 알려진 방법들에 의지하는 결과를 초래할 수 있다. 그러나, 만일 버전 또는 체크섬 정보 또는 양쪽 모두가 정확하다면, 로딩 기능들은 단계 919로 진행할 수 있고, 이 단계에서는 압축 자원 파일로 압축되는 요청된 자원이 요청 프로세스의 프로세스 어드레스 공간에 매핑되고, 단계 925에서 자원의 로딩이 계속될 수 있다.
단계 909로 돌아가서, 만일 로딩 기능들이 요청된 자원이 이전에 로딩되지 않은 압축 자원 파일 내에 있다고 판정하면, 로딩 기능들은 단계 911에 도시된 바와 같이 압축 자원 파일을 위치 지정하여 그것에 바인드할 수 있다. 동일 압축 자원 파일 내에 포함된 것들과 같은, 자원들의 공유를 용이하게 하기 위하여, 로딩 기능들은 단계 913에 도시된 바와 같이 실행중인 프로세스들에 걸쳐서 압축 자원 파일을 메모리 매핑할 수 있다. 단계 913은 메모리 페이징 영역에서 압축 자원 파 일을 생성 및 개방하고, 영구적 객체를 생성하는 것을 포함하는, 프로세스들에 걸쳐서 파일을 공유하기 위한 다양한 방법들 중 어느 하나를 고려한다. 당업자라면 잘 알겠지만, 하나의 파일이 다수의 프로세스들에 의해 공유될 때, 하나의 프로세스가 그 파일을 액세스하는 동안 다른 하나의 파일에 의해 그 파일에 대한 액세스가 종료되지 않도록 보증하기 위해 카운터가 유지될 수 있다. 마찬가지로, 압축 자원 파일이 공유될 때, 현재 그 압축 자원 파일을 액세스하는 프로세스들의 수를 추적하기 위해 카운터 또는 유사한 구성이 이용될 수 있다. 따라서, 도 9에 구체적으로 도시되어 있지는 않지만, 단계 915는 다른 프로세스들에 의한 압축 자원 파일의 사용을 추적하는 카운터의 증분(increment)을 포함할 수 있다.
알 수 있듯이, 압축 자원 파일 구조, 및 자원 매니페스트는 파일들의 수를 줄이고, 파일 I/O 오퍼레이션의 수를 줄이고, 또한 그러한 자원 파일들이 로딩될 때 소비되는 메모리를 감소시킴으로써 능률의 증대를 제공한다. 개선된 오퍼레이팅 시스템 아키텍처를 생성하고, 설치하고, 사용하는 개선된 오퍼레이팅 시스템 아키텍처에 대하여 설명하였다는 것을 알 것이다. 본 발명의 원리들이 적용될 수 있는 다수의 가능한 실시예들을 예상하여, 도면들과 관련하여 여기서 설명된 실시예들은 단지 예시로서 의도된 것일 뿐 본 발명의 범위를 제한하는 것으로 간주되어서는 안 된다는 것을 알아야 한다. 예를 들면, 당업자라면 소프트웨어로 도시된 예시된 실시예들의 일부 엘리먼트들이 하드웨어로 실시될 수도 있고 그 반대로도 가능하고 또는 예시된 실시예들은 본 발명의 정신을 벗어나지 않고 배열 및 세부 사항에서 변경될 수 있다는 것을 알 것이다. 그러므로, 여기에 설명된 발명은 하기 의 특허청구범위 및 그 균등물의 범위 내에 들 수 있는 모든 그러한 실시예들을 예상한다.
이상과 같이, 본 발명에 따르면, 능률성을 위하여 보다 큰 파일들의 보다 작은 세트로 압축된, 언어 중립적(language neutral) 부분 및 로컬화 가능(localizable) 부분을 갖는 두 갈래 분기형(bifurcated) 구조를 포함하는 개선된 애플리케이션 아키텍처가 제공되고, 이 두 갈래 분기형 구조에 의하면, 보다 용이한 애플리케이션의 배포 및 업데이트를 가능해지고, 그와 동시에 파일들의 세트가 축소됨에 따라서 보다 능률적인 파일 관리가 가능해진다.
Claims (21)
- 하나의 컴포넌트에 대한 언어 중립적(language-neutral) 파일 및 그에 대응하는 언어 특정적(language specific) 자원 파일을 생성하는 방법에 있어서,자원 매니페스트 파일(resource manifest file)을 획득하는 단계와;상기 자원 매니페스트 파일을 액세스함으로써 자원 파일을 검색하는 단계와;상기 검색된 자원 파일에 대한 언어 중립적 파일 및 언어 특정적 자원 파일을 생성하는 단계 - 상기 언어 특정적 자원 파일은 복수의 언어 특정적 자원을 가지고, 상기 언어 중립적 파일 및 상기 언어 특정적 자원 파일은 상기 자원 매니페스트 파일에 포함된 로컬화 가능(localizable) 자원 정보를 판독함으로써 생성되며, 특정 자원들의 위치들을 지정하는 상기 로컬화 가능 자원 정보는 런타임 중에 상기 언어 특정적 자원 파일로부터 검색되고, 상기 자원 매니페스트 파일에서, 상기 특정 자원들의 상기 위치들은 상기 언어 특정적 자원 파일 내의 상기 특정 자원들을 식별하기 위하여 애플리케이션들에 의해 사용되는 자원 식별자들로 매핑되며, 상기 자원 매니페스트 파일은 또한 검색되는 자원의 타입을 특정하고 상기 자원이 로컬화 가능한지 여부를 지시함 - 와;상기 자원 매니페스트 파일에 체크섬(checksum) 데이터를 생성하는 단계와;상기 체크섬 데이터를 이용해 상기 자원 매니페스트 파일 내의 필드를 업데이트하는 단계를 포함하고,상기 언어 중립적 파일 및 언어 특정적 자원 파일은, 상기 로컬화 가능 자원 정보에 의해 식별된 로컬화 가능 자원들을 중립적 파일 및 로컬화된 파일로 분할하고, 상기 검색된 자원 파일의 언어 중립적 이미지 및 언어 특정적 이미지를 생성함으로써 생성되는, 방법.
- 제1항에 있어서,상기 자원 매니페스트 파일은 지정되는(specified), 방법.
- 제1항에 있어서,상기 자원 매니페스트 파일은 지정되지 않고 디폴트 자원 매니페스트 파일이 사용되는, 방법.
- 제1항에 있어서,상기 자원 매니페스트 파일은 확장성 생성 언어(XML) 기반 선언 부분 파일(XML based declarative file)인 방법.
- 제1항에 있어서,상기 로컬화 가능 자원 정보는 압축 자원 파일 내에 존재하는, 방법.
- 제1항에 있어서,상기 언어 중립적 파일 및 언어 특정적 자원 파일을 생성하는 단계는, 복수의 데이터 필드에 대한 판독에 의해, 상기 자원 매니페스트 파일로부터 상기 로컬화 가능 자원 정보를 판독하는 단계를 포함하고, 상기 복수의 데이터 필드는,스키마가 자원 로컬화 정보를 포함하는 것을 지시하는 엘리먼트를 나타내는 데이터를 포함하는 제1 데이터 필드와;사용자 인터페이스 자원과 관련된 엘리먼트를 나타내는 데이터를 포함하는 제2 데이터 필드와;상기 제2 데이터 필드의 사용자 인터페이스 자원 엘리먼트의 언어 의존성을 나타내는 데이터를 포함하는 제3 데이터 필드와;사용자 인터페이스 자원 타입과 관련된 엘리먼트를 나타내는 데이터를 포함하는 제4 데이터 필드를 포함하는, 방법.
- 제6항에 있어서,상기 제2 데이터 필드는 비관리형 자원들(unmanaged resources)을 나타내는, 방법.
- 제6항에 있어서,상기 제2 데이터 필드는 관리형 자원들(managed resources)을 나타내는, 방법.
- 제6항에 있어서,상기 제3 데이터 필드는 언어 중립적 자원들을 나타내는, 방법.
- 제6항에 있어서,상기 제3 데이터 필드는 로컬화된 자원들을 나타내는, 방법.
- 제6항에 있어서,상기 복수의 데이터 필드에 대한 판독은,상기 제2 데이터 필드의 사용자 인터페이스 자원 엘리먼트의 자원 파일의 파일 경로를 나타내는 데이터를 포함하는 제5 데이터 필드와;상기 파일 경로의 파일 경로 타입을 나타내는 데이터를 포함하는 제6 데이터 필드와;상기 자원 파일의 파일 타입을 나타내는 데이터를 포함하는 제7 데이터 필드에 대한 판독을 포함하는, 방법.
- 제6항에 있어서,상기 복수의 데이터 필드에 대한 판독은, 디폴트 자원 매니페스트를 참조할지에 대한 지시(indication)를 나타내는 데이터를 포함하는 제8 데이터 필드에 대한 판독을 더 포함하는, 방법.
- 제6항에 있어서,상기 복수의 데이터 필드에 대한 판독은,압축 자원 파일의 파일명을 나타내는 데이터를 포함하는 제9 데이터 필드와;상기 압축 자원 파일의 파일 버전을 나타내는 데이터를 포함하는 제10 데이터 필드와;상기 압축 자원 파일 내의 자원 로컬화 파일의 인덱스 값을 나타내는 데이터를 포함하는 제11 데이터 필드에 대한 판독을 더 포함하는, 방법.
- 제6항에 있어서,상기 복수의 데이터 필드에 대한 판독은,자원 파일의 파일 버전을 나타내는 데이터를 포함하는 제12 데이터 필드와;체크섬 값을 나타내는 데이터를 포함하는 제13 데이터 필드에 대한 판독을 더 포함하는, 방법.
- 제6항에 있어서,상기 복수의 데이터 필드에 대한 판독은,상기 제4 데이터 필드의 사용자 인터페이스 자원 타입과 관련된 엘리먼트의 명칭을 나타내는 데이터를 포함하는 제14 데이터 필드와;상기 제4 데이터 필드의 사용자 인터페이스 자원 타입과 관련된 엘리먼트의 식별자를 나타내는 데이터를 포함하는 제15 데이터 필드와;자원 항목의 명칭을 나타내는 데이터를 포함하는 제16 데이터 필드와;상기 자원 항목의 식별자를 나타내는 데이터를 포함하는 제17 데이터 필드에 대한 판독을 더 포함하는, 방법.
- 제6항에 있어서,상기 복수의 데이터 필드는 확장성 생성 언어(XML) 기반 선언 부분 파일을 포함하는 스키마로 된, 방법.
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/692,049 US7516442B2 (en) | 2003-10-23 | 2003-10-23 | Resource manifest |
US10/692,049 | 2003-10-23 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20050039532A KR20050039532A (ko) | 2005-04-29 |
KR101104035B1 true KR101104035B1 (ko) | 2012-01-09 |
Family
ID=34435457
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020040070419A KR101104035B1 (ko) | 2003-10-23 | 2004-09-03 | 자원 매니페스트 |
Country Status (7)
Country | Link |
---|---|
US (1) | US7516442B2 (ko) |
EP (1) | EP1530127B1 (ko) |
JP (1) | JP4936654B2 (ko) |
KR (1) | KR101104035B1 (ko) |
CN (1) | CN100524210C (ko) |
AT (1) | ATE474264T1 (ko) |
DE (1) | DE602004028089D1 (ko) |
Families Citing this family (52)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7093132B2 (en) * | 2001-09-20 | 2006-08-15 | International Business Machines Corporation | Method and apparatus for protecting ongoing system integrity of a software product using digital signatures |
KR20060082014A (ko) * | 2005-01-11 | 2006-07-14 | 삼성전자주식회사 | 매니페스트 파일 자료구조, 이를 이용한 컨텐츠 다운로드방법 및 그 재생장치 |
US7610297B2 (en) * | 2005-01-25 | 2009-10-27 | Honeywell International Inc. | Method to automate resource management in computer applications |
US7921138B2 (en) * | 2005-09-12 | 2011-04-05 | Microsoft Corporation | Comment processing |
US7747588B2 (en) * | 2005-09-12 | 2010-06-29 | Microsoft Corporation | Extensible XML format and object model for localization data |
US8250137B1 (en) * | 2005-09-19 | 2012-08-21 | Apple Inc. | Peer to peer component distribution |
US7904883B2 (en) * | 2005-12-01 | 2011-03-08 | Microsoft Corporation | Localizable object pattern |
CN101366035B (zh) * | 2005-12-13 | 2012-09-05 | 格马尔托股份有限公司 | 用于执行中间代码编译的应用程序的方法 |
US8789016B2 (en) * | 2005-12-29 | 2014-07-22 | Panasonic Corporation | Systems and methods for providing user configurable software libraries |
CA2638875C (en) * | 2006-03-27 | 2010-01-12 | Teamon Systems, Inc. | System and method for rendering presentation pages based on locality |
EP1847923A1 (en) | 2006-04-21 | 2007-10-24 | Microsoft Corporation | Localising unstructured resources |
US9003396B2 (en) * | 2006-06-19 | 2015-04-07 | Lenovo Enterprise Solutions (Singapore) Pte. Ltd. | File manager integration of uninstallation feature |
US8661425B1 (en) * | 2006-07-28 | 2014-02-25 | American Megatrends, Inc. | Method, apparatus, and computer-readable medium for storing data associated with a firmware program |
US20100242034A1 (en) * | 2006-11-01 | 2010-09-23 | Microsoft Corporation | Distributing software products as an executable containing script logic with external resources |
US7797743B2 (en) * | 2007-02-26 | 2010-09-14 | Microsoft Corporation | File conversion in restricted process |
GB2466581B (en) * | 2007-10-25 | 2013-01-09 | Hewlett Packard Development Co | Data processing apparatus and method of deduplicating data |
US8140637B2 (en) | 2007-10-25 | 2012-03-20 | Hewlett-Packard Development Company, L.P. | Communicating chunks between devices |
WO2009054834A1 (en) * | 2007-10-25 | 2009-04-30 | Hewlett-Packard Development Company, L.P. | Data processing apparatus and method of processing data |
US8150851B2 (en) * | 2007-10-25 | 2012-04-03 | Hewlett-Packard Development Company, L.P. | Data processing apparatus and method of processing data |
DE112007003693B4 (de) | 2007-10-25 | 2014-05-15 | Hewlett-Packard Development Co., L.P. | Datenverarbeitungsvorrichtung und Verfahren zur Datenverarbeitung |
US8307008B2 (en) | 2007-10-31 | 2012-11-06 | Microsoft Corporation | Creation and management of electronic files for localization project |
US7930167B2 (en) * | 2008-01-31 | 2011-04-19 | Microsoft Corporation | Videogame localization using language packs |
US8595710B2 (en) * | 2008-03-03 | 2013-11-26 | Microsoft Corporation | Repositories and related services for managing localization of resources |
GB2472520B (en) * | 2008-04-25 | 2012-11-21 | Hewlett Packard Development Co | Data processing apparatus and method of deduplicating data for data backup |
EP2141589A1 (en) * | 2008-06-25 | 2010-01-06 | Research In Motion Limited | Electronic documents and methods for updating resource files for an application |
US9268779B2 (en) * | 2009-01-28 | 2016-02-23 | Mckesson Financial Holdings | Methods, computer program products, and apparatuses for dispersing content items |
US20100251227A1 (en) * | 2009-03-25 | 2010-09-30 | Microsoft Corporation | Binary resource format and compiler |
US8943482B2 (en) | 2009-05-15 | 2015-01-27 | International Business Machines Corporation | Incrementally constructing executable code for component-based applications |
CN102043658A (zh) * | 2009-10-26 | 2011-05-04 | 环达电脑(上海)有限公司 | 资源文件产生装置及其方法 |
JP2011221855A (ja) * | 2010-04-12 | 2011-11-04 | Seiko Epson Corp | リソースデータ管理装置、リソースデータ管理方法、およびリソースデータ管理プログラム |
US8499131B2 (en) | 2010-04-13 | 2013-07-30 | Hewlett-Packard Development Company, L.P. | Capping a number of locations referred to by chunk references |
US8910122B2 (en) | 2010-06-16 | 2014-12-09 | International Business Machines Corporation | Validating translations of externalized content for inclusion in an application |
CN101950251B (zh) * | 2010-09-14 | 2013-05-29 | 浙江大学 | 移动Widget的本地化方法 |
US9778915B2 (en) | 2011-02-28 | 2017-10-03 | Microsoft Technology Licensing, Llc | Distributed application definition |
US9990184B2 (en) | 2011-03-25 | 2018-06-05 | Microsoft Technology Licensing, Llc | Distributed component model |
US9465589B2 (en) | 2011-04-05 | 2016-10-11 | Microsoft Technology Licensing, Llc | Stateful component authoring and execution |
US8904128B2 (en) | 2011-06-08 | 2014-12-02 | Hewlett-Packard Development Company, L.P. | Processing a request to restore deduplicated data |
CN102314365A (zh) * | 2011-09-08 | 2012-01-11 | 北京新媒传信科技有限公司 | 一种安装包制作方法和工具 |
US9823917B2 (en) * | 2011-10-20 | 2017-11-21 | Facebook, Inc. | Update application user interfaces on client devices |
CN103309647A (zh) * | 2012-03-08 | 2013-09-18 | 鸿富锦精密工业(深圳)有限公司 | 应用程序多语言支持系统及方法 |
US9239817B2 (en) * | 2012-04-19 | 2016-01-19 | Microsoft Technology Licensing, Llc | Managing web extension through manifest file |
CN103488626B (zh) * | 2013-09-03 | 2017-04-12 | 深圳Tcl新技术有限公司 | 一种对终端的与参数名称映射的字符串纠错的方法和装置 |
US9223555B2 (en) * | 2013-11-07 | 2015-12-29 | Netronome Systems, Inc. | Hierarchical resource pools in a linker |
JP6192570B2 (ja) * | 2014-02-27 | 2017-09-06 | 京セラドキュメントソリューションズ株式会社 | アプリケーション開発支援プログラム及びアプリケーション開発支援システム |
CN106708593B (zh) * | 2015-07-16 | 2020-12-08 | 中兴通讯股份有限公司 | 一种程序链接的编译方法及装置 |
CN106557343A (zh) * | 2015-09-30 | 2017-04-05 | 阿里巴巴集团控股有限公司 | 生成功能应用及加载资源的方法及装置 |
CN107566212B (zh) * | 2017-08-25 | 2021-07-02 | 郑州云海信息技术有限公司 | 一种资源监控管理方法和装置 |
CN108287812A (zh) * | 2018-01-15 | 2018-07-17 | 浙江省公众信息产业有限公司 | 项目化案例表示方法和装置 |
CN111563223B (zh) * | 2020-05-12 | 2023-09-19 | 北京飞漫软件技术有限公司 | 一种网页页面本地化方法及装置 |
CN114201703A (zh) * | 2020-09-18 | 2022-03-18 | 华为技术有限公司 | 一种的生成文件的方法及电子设备 |
US11636064B2 (en) | 2021-07-13 | 2023-04-25 | Microsoft Technology Licensing, Llc | Compression of localized files |
CN114020694B (zh) * | 2021-10-19 | 2022-10-28 | 北京五八信息技术有限公司 | 一种头文件地址的获取方法、装置、电子设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001142600A (ja) | 1999-11-15 | 2001-05-25 | Canon Inc | 多国語表示切替装置およびその切替方法 |
US20020052910A1 (en) | 2000-10-30 | 2002-05-02 | Microsoft Corporation | System and method for dynamically verifying the compatibility of a user interface resource |
EP1315086A1 (en) | 2001-11-27 | 2003-05-28 | Sun Microsystems, Inc. | Generation of localized software applications |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5678039A (en) * | 1994-09-30 | 1997-10-14 | Borland International, Inc. | System and methods for translating software into localized versions |
US6252589B1 (en) * | 1998-08-14 | 2001-06-26 | Microsoft Corporation | Multilingual user interface for an operating system |
US6292773B1 (en) * | 1999-06-28 | 2001-09-18 | Avaya Technology Corp. | Application-independent language module for language-independent applications |
US6799208B1 (en) * | 2000-05-02 | 2004-09-28 | Microsoft Corporation | Resource manager architecture |
US6868539B1 (en) * | 2000-06-28 | 2005-03-15 | Microsoft Corp. | System and method providing single application image |
US20020162093A1 (en) * | 2001-04-30 | 2002-10-31 | Ming Zhou | Internationalization compiler and process for localizing server applications |
US7007026B2 (en) * | 2001-12-14 | 2006-02-28 | Sun Microsystems, Inc. | System for controlling access to and generation of localized application values |
US7152222B2 (en) * | 2002-01-08 | 2006-12-19 | International Business Machines Corporation | Method and system for localizing Java™ JAR files |
-
2003
- 2003-10-23 US US10/692,049 patent/US7516442B2/en not_active Expired - Fee Related
-
2004
- 2004-08-18 EP EP04019595A patent/EP1530127B1/en not_active Not-in-force
- 2004-08-18 AT AT04019595T patent/ATE474264T1/de not_active IP Right Cessation
- 2004-08-18 DE DE602004028089T patent/DE602004028089D1/de active Active
- 2004-09-03 KR KR1020040070419A patent/KR101104035B1/ko not_active IP Right Cessation
- 2004-09-22 JP JP2004275872A patent/JP4936654B2/ja not_active Expired - Fee Related
- 2004-10-22 CN CNB2004100882821A patent/CN100524210C/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001142600A (ja) | 1999-11-15 | 2001-05-25 | Canon Inc | 多国語表示切替装置およびその切替方法 |
US20020052910A1 (en) | 2000-10-30 | 2002-05-02 | Microsoft Corporation | System and method for dynamically verifying the compatibility of a user interface resource |
EP1202168A2 (en) | 2000-10-30 | 2002-05-02 | Microsoft Corporation | System and method for dynamically veryfying the compatibility of a user interface resource |
EP1315086A1 (en) | 2001-11-27 | 2003-05-28 | Sun Microsystems, Inc. | Generation of localized software applications |
Also Published As
Publication number | Publication date |
---|---|
JP2005129028A (ja) | 2005-05-19 |
CN100524210C (zh) | 2009-08-05 |
US20050108433A1 (en) | 2005-05-19 |
EP1530127A2 (en) | 2005-05-11 |
EP1530127A3 (en) | 2007-02-21 |
US7516442B2 (en) | 2009-04-07 |
KR20050039532A (ko) | 2005-04-29 |
ATE474264T1 (de) | 2010-07-15 |
JP4936654B2 (ja) | 2012-05-23 |
CN1609799A (zh) | 2005-04-27 |
DE602004028089D1 (de) | 2010-08-26 |
EP1530127B1 (en) | 2010-07-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101104035B1 (ko) | 자원 매니페스트 | |
US7305376B2 (en) | Multiple language-dependent resources compacted into a single resource file | |
US9569286B2 (en) | Method and system for improving startup performance and interoperability of a virtual application | |
Thai et al. | . NET framework essentials | |
Richter | Applied Microsoft. NET framework programming | |
US8332835B2 (en) | Method and system for automated code-source indexing in java virtual machine environment | |
US7530079B2 (en) | Managing application customization | |
US7549148B2 (en) | Self-describing software image update components | |
EP1544732A2 (en) | Creating file systems within an image file in a storage technology-abstracted manner | |
US20040003388A1 (en) | Preparation of a software configuration using an XML type programming language | |
Dahlgren et al. | Babel users' guide | |
US6993744B2 (en) | Method for enabling a compiler or interpreter to use identifiers found at run time in a map container object in a manner similar or identical to identifiers declared at compile time | |
US20090320007A1 (en) | Local metadata for external components | |
Heege | Expert Visual C++/CLI:. NET for Visual C++ Programmers | |
Ward et al. | Distributing python modules | |
Team | Report on Formal Management of Software Dependencies | |
Eisenbach et al. | Keeping control of reusable components | |
Fouché et al. | VB 2005 and the CLR | |
Blume | The SML/NJ Compilation and Library Manager | |
Dhillon | Managing license incompatibilities distributing eclipse application stacks | |
Kim | Frigate: an object-oriented file system | |
Rideau et al. | Evolving ASDF: more cooperation, less coordination | |
Parser et al. | WebServices-Axis | |
Syme et al. | Encapsulating and Packaging Your Code | |
SAVIDIS | The Delta Dynamic Object-Oriented Programming |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
LAPS | Lapse due to unpaid annual fee |