Я создаю установочный пакет с помощью InstallShield 2012 для надстройки Excel. Поскольку у MS Excel есть 32-битная версия и 64-битная версия, мне нужно собирать установочные пакеты отдельно. В идеале установочный файл должен уметь определять разрядность Excel (не разрядность Windows) на первых нескольких шагах установки, прежде чем файлы будут скопированы на целевую машину. Однако после некоторых обширных исследований в Интернете я не нашел надежного способа определения разрядности Excel. У кого есть идеи, пожалуйста, не стесняйтесь помочь. Спасибо
Определение разрядности Excel в InstallShield 2012
Ответы (3)
Вот код (LUA - Setup Factory), который я использую: он работает, даже если Outlook не установлен.
-- check if 64 bit office installed
s64_14 = Registry.GetValue(3, "Software\\Wow6432Node\\Microsoft\\Office\\14.0\\Outlook","Bitness",true);
s64_15 = Registry.GetValue(3, "Software\\Wow6432Node\\Microsoft\\Office\\15.0\\Outlook","Bitness",true);
s64_16 = Registry.GetValue(3, "Software\\Wow6432Node\\Microsoft\\Office\\16.0\\Outlook","Bitness",true);
bl64Bit = false;
if (s64_14=="x64" or s64_15=="x64" or s64_16=="x64") then
bl64Bit = true
end
-- check for 64-bit OS
bl64BitOS=false;
if SessionVar.Expand("%ProgramFilesFolder%") ~= SessionVar.Expand("%ProgramFilesFolder64%") then
bl64BitOS=true
end
person
Charles Williams
schedule
10.05.2013
Спасибо, Чарльз. Я заметил, что в Outlook есть значение Bitness, но, поскольку у меня установлен Outlook, я не был уверен, будет ли он по-прежнему доступен без Outlook. Итак, вы пробовали это с Outlook, который никогда не устанавливался? (Я хочу исключить ситуацию, когда Outlook был установлен, а затем удален, но оставить ключ реестра уже измененным)
- person wuxilixi; 11.05.2013
Да, это работает, даже если Outlook никогда не устанавливался. Я не проверял ситуацию, если Outlook установлен, а затем удален.
- person Charles Williams; 11.05.2013
У меня была похожая дискуссия с пользователем Advanced Installer, вы можете ознакомиться с ней на наши форумы, пользователь хотел определить разрядность Office.
person
Bogdan Mitrache
schedule
11.05.2013
Вы не можете полагаться на раздел реестра Bitness, указанный в вашем ответе. Этот ключ отсутствует, если вы устанавливаете из автономной установки Excel.
- person Armin Sadeghi; 24.09.2014
Вы должны создать 2 свойства, чтобы отслеживать, какая версия Excel установлена, а затем использовать эти свойства в качестве условий функции «EXCEL32_EXISTS = 0». Вот код, который я использовал для этого: изначально для EXCEL32_EXISTS и EXCEL64_EXISTS установлено значение 0.
Excel_Installed=FALSE;
szKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\excel.exe";
if (RegDBKeyExist(szKey)=1) then
Excel_Installed=TRUE;
RegDBGetKeyValueEx ( szKey, "Path", nvType, ExcelPath, nvSize );
SprintfMsiLog( "Found Excel @ %s", ExcelPath );
if ( StringContains(ExcelPath, "Office11")=TRUE ) then
Excel_Installed=FALSE;
elseif ( SYSINFO.bIsWow64=FALSE ) then
MsiSetProperty(hMSI, "EXCEL32_EXISTS", "1");
elseif ( (StringContains(ExcelPath, "(x86)")=TRUE) || (StringContains(ExcelPath, "Office12")=TRUE) ) then
MsiSetProperty(hMSI, "EXCEL32_EXISTS", "1");
else
MsiSetProperty(hMSI, "EXCEL64_EXISTS", "1");
endif;
endif;
export prototype BOOL StringContains(STRING,STRING);
function BOOL StringContains(szSource, szArgs)
BOOL bContains;
begin
if(szSource % szArgs) then
bContains = TRUE;
else
bContains = FALSE;
endif;
return bContains;
end;
person
Nothing 2 Lose
schedule
13.05.2013