Необходимо программно определить, какая версия MS Office установлена ​​без ложных срабатываний / негативов. - PullRequest
2 голосов
/ 12 декабря 2011

Мне нужен способ, который работает постоянно, а не только в большинстве случаев.

До сих пор я использовал метод проверки, если "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?

1 Ответ

2 голосов
/ 12 декабря 2011

Один из способов получить «активную» версию 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 и т. д.).

...