我需要一种始终有效的方式,而不仅仅是大部分时间。
到目前为止,我一直在使用检查“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的版本吗?
答案 0 :(得分: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
等)。