Я создаю установщик для Microsoft Office, в частности для версий 2007 - 2013 годов. Он просто копирует некоторые файлы внутри двух каталогов Office. Моя Windows 64-разрядная, но я хочу создать установщик для x64 и x86-архитектур.Как установить каталог установки Office из реестра установщика Inno Setup
Итак, я написал следующий код, который пытается извлечь из реестра Windows путь установки Office. И, для каждой версии Office (2007 - 2013), она берет путь установки и добавляет остальную часть пути, в котором я нуждаюсь. Это результат, который я хочу.
[Code]
function GetHKLM() : Integer;
begin
if IsWin64 then
begin
Result := HKLM64;
end
else
begin
Result := HKEY_LOCAL_MACHINE;
end;
end;
function officeInstallDir(Param: string): string;
// This function takes the type of desired directory,
// verify the version of Office and returns the correct
// directory for style or bibform.
var
styleFolder, bibformFolder : string;
begin
// It verifies the Office version through the registry's subkey and it sets the correct Office's path.
if RegKeyExists(GetHKLM(), '\SOFTWARE\Microsoft\Office\15.0') then begin
styleFolder := '{userappdata}\Roaming\Microsoft\Bibliography\Style';
RegQueryStringValue(GetHKLM(), '\SOFTWARE\Microsoft\Office\15.0\Common', 'InstallRoot', bibformFolder);
bibformFolder := bibformFolder + '\1046\Bibliography';
end else begin
if RegKeyExists(GetHKLM(), '\SOFTWARE\Microsoft\Office\14.0') then begin
RegQueryStringValue(GetHKLM(), '\SOFTWARE\Microsoft\Office\14.0\Common', 'InstallRoot', styleFolder);
styleFolder := styleFolder + 'Bibliography\Style';
bibformFolder := styleFolder + '1046\Bibliography';
end else begin
if RegKeyExists(GetHKLM(), '\SOFTWARE\Microsoft\Office\12.0') then begin
RegQueryStringValue(GetHKLM(), '\SOFTWARE\Microsoft\Office\12.0\Common', 'InstallRoot', styleFolder);
styleFolder := styleFolder + 'Bibliography\Style';
bibformFolder := styleFolder + '1046\Bibliography';
end
end;
end;
// Set the result according Param passed (the first or second type of path).
if Param = 'style' then begin
result := styleFolder;
end else begin
result := bibformFolder;
end;
end;
С одним из путей, я попытался установить инсталляционный путь к файлу (DestDir) в Inno Setup, как это:
[Files]
Source: "E:\Google Drive\Informática\Bibword\Bibword Estilos\*"; DestDir: "{code:officeInstallDir|style}"; Flags: ignoreversion
Source: "E:\Google Drive\Informática\Bibword\Bibword file\BIBFORM.xml"; DestDir: "{code:officeInstallDir|bibform}"; Flags: ignoreversion
Но если я прохожу стиль параметров или bibform, функция officeInstallDir должен помочь мне установить правильный путь для каждой строки. Но RegKeyExists или RegQueryStringValue не находит подразделы реестра. Я даже попытался использовать функцию GetHKLM(), потому что проблема с 64-битным узлом, но не ушла.
Может кто-нибудь мне помочь?
Спасибо за ответ, но я попробовал ваше предложение о GetHKLM() и возникла ошибка в функции RegKeyExists(). Справка определяет эту функцию как функцию RegKeyExists (const RootKey: Integer; const SubKeyName: String): Boolean ;. Таким образом, Rootkey должен быть целым числом. –
Поскольку я новичок в программировании реестра, я совершенно не понимаю, когда я использую ваши «if RegKeyExists» (GetHKLM(), «SOFTWARE \ Microsoft \ Office \ 15.0 \ Common \ InstallRoot»), тогда «и это сработало? Почему if не работал с «ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Office \ 15.0»? И еще раз спасибо! –
И еще одна вещь. Я должен изменить строку с помощью 'styleFolder: = '{userappdata} \ Roaming \ Microsoft \ Bibliography \ Style';' для 'styleFolder: = ExpandConstant ('{userappdata} \ Microsoft \ Bibliography \ Style');'. –