2011-12-12 1 views
2

대부분의 시간뿐만 아니라 항상 작동하는 방법이 필요합니다.오탐/음수없이 설치된 MS Office 버전을 프로그래밍 방식으로 감지해야합니다.

지금까지 "HKLM \ Software \ Microsoft \ Office \ 14.0 \ Word \ InstallRoot"레지스트리 키가 있는지 확인하는 방법을 사용했습니다 (14.0은 Word 2010 용입니다).

그러나 최근에는 Word 2010을 설치했지만 키가없는 사용자 인 잘못된 음성이있었습니다. 그의 레지스트리에는 HKLM \ Software \ Microsoft \ Office \ 14.0 \ Word가 있지만 HKLM \ Software \ Microsoft \ Office \ 14.0 \ Word \ InstallRoot는 없습니다. 이로 인해 내 프로그램에서 리본 인터페이스에 맞게 최적화되지 않은 툴바의 이전 버전을 설치하게되었습니다.

이전에 Word 2007을 설치했지만 제거한 Word 2003 사용자도 오정렬했습니다. Office 2007의 레지스트리 키가 있었기 때문에 설치 프로그램을 실행하고 리본에 최적화되었지만 Word 2003에서는로드 할 수없는 도구 모음을 설치했습니다.

Office 버전을 더 잘 감지 할 수있는 방법이 있습니까?

답변

2

이전/단편적인 설치와 상관없이 "활성"버전의 Word를 가져 오는 한 가지 방법은 현재 등록 된 자동화 서버의 버전을 요청하는 것입니다.

[Code] 
function WordVer(dummy: String): String; 
var 
    Obj: Variant; 
begin 
    try 
    Obj := CreateOleObject('Word.Application'); 
    Result := Obj.Version; 
    Obj.Quit(False); 
    except 
    RaiseException('not installed'); 
    end; 
end; 

및 사용

대본 일정 {code:WordVer} 버전 문자열을 ( 12.0 등)을 얻을 수 있습니다.

+0

설명서에는 CreateOleObject가 예외를 발생시킬 수 있다고 나와 있지만, Inno Setup에서 예외가 어떻게 처리되는지, 그렇지 않은 경우 어떻게되는지는 알지 못합니다. 이 사건에 대해 걱정해야합니까? – sashoalm

+0

오류가있는 경우 RaiseException이 오류를 중지해야합니다. 유효하지 않은 progid를 사용하여 테스트 할 수 있습니다. 'CreateOleObject ('Cheese.Cake');' –

관련 문제