2

我有两种类型的 Office 加载项——一种用于 Office 2013,另一种用于其他版本 (2003-2010)。
我使用 Inno Setup 进行分发包。
是否可以确定目标计算机上安装的 Office 版本,而不是运行正确的安装文件?

我试图编写检测 Word 版本并安装适当文件的代码,但我未能编译它。由于这是我第一次编写这样的代码,所以我想请你看看我的代码。

[Files]
Source: "C:\Program Files\Inno Setup 5\Examples\MyProg2013.exe"; DestDir: "{app}"; Check: "Install2013"; MinVersion: 0.0,5.0;
Source: "C:\Program Files\Inno Setup 5\Examples\MyProg2010.exe"; DestDir: "{app}"; Check: "Install2010"; MinVersion: 0.0,5.0; 
Source: "C:\Program Files\Inno Setup 5\Examples\MyProg2013x86.dll"; DestDir: "{app}"; Check: "Install2013"; MinVersion: 0.0,5.0; Flags: regserver noregerror ignoreversion 32bit 
Source: "C:\Program Files\Inno Setup 5\Examples\MyProg2013x64.dll"; DestDir: "{app}"; Check: "Install2013 and Is64BitInstallMode"; MinVersion: 0.0,5.0; Flags: regserver noregerror ignoreversion 64bit 
Source: "C:\Program Files\Inno Setup 5\Examples\MyProg2010x84.dll"; DestDir: "{app}"; Check: "Install2010"; MinVersion: 0.0,5.0; Flags: regserver noregerror ignoreversion 32bit
Source: "C:\Program Files\Inno Setup 5\Examples\MyProg2010x64.dll"; DestDir: "{app}"; Check: "Install2010 and Is64BitInstallMode"; MinVersion: 0.0,5.0; Flags: regserver noregerror ignoreversion 64bit 

Root: HKCU; Subkey: "Software\My Program\AppforWord"; ValueName: "AppBarStyle"; ValueType: String; ValueData: "1"; Components: "AppforWord"; Check: "Install2010"; MinVersion: 0.0,5.0; Flags: uninsdeletevalue 
Root: HKCU; Subkey: "Software\My Program\AppforExcel"; ValueName: "Enable"; ValueType: String; ValueData: "2"; Components: "AppforWord"; Check: "Install2010"; MinVersion: 0.0,5.0; Flags: uninsdeletevalue
Root: HKCU; Subkey: "Software\My Program\AppforWord"; ValueName: "AppBarStyle"; ValueType: String; ValueData: "1"; Components: "AppforWord"; Check: "Install2013"; MinVersion: 0.0,5.0; Flags: uninsdeletevalue 
Root: HKCU; Subkey: "Software\My Program\AppforExcel"; ValueName: "Enable"; ValueType: String; ValueData: "2"; Components: "AppforWord"; Check: "Install2013"; MinVersion: 0.0,5.0; Flags: uninsdeletevalue

[Icons]
Name: "{commondesktop}\MyProg 2013"; Filename: "{app}\MyProg2013.exe"; Comment: "The settings for My Program 2013"; Check: "Install2013"; MinVersion: 0.0,5.0;
Name: "{commondesktop}\MyProg 2010"; Filename: "{app}\MyProg2010.exe"; Comment: "The settings of My Program"; Check: "Install2010"; MinVersion: 0.0,5.0;
[Code]
{ Get office version }
function IsInstall2013(): boolean;
var
    success: boolean;
    OfficeVer: cardinal;
begin
    success :=
        RegQueryDWordValue(
            HKEY_CLASSES_ROOT, 'Word.Application\CurVer', Word.Application.15' );
    Result := success and (OfficeVer = Word.Application.15);
end;

{ RETURNS OPPOSITE OF IsInstall2013 FUNCTION }
function Install2013(): Boolean;
begin
  Result := (IsInstall2013 = false);
end;

{ RETURNS OPPOSITE OF not Office2013 FUNCTION }
function Install2010(): Boolean;
begin
  Result := (IsInstall2010 = true);
end;

因为我还想创建一个 Inno Setup 安装例程来检测某人正在使用的 Office 版本。我已经尝试了上述代码的各种迭代,但似乎无法正常工作。

我的目标很简单...如果有人使用 Office 2010,请安装文件 A、B、C。如果有人使用 Office 2013,请安装文件 D、E、F。

4

0 回答 0