Определение разрядности Excel в InstallShield 2012

Я создаю установочный пакет с помощью InstallShield 2012 для надстройки Excel. Поскольку у MS Excel есть 32-битная версия и 64-битная версия, мне нужно собирать установочные пакеты отдельно. В идеале установочный файл должен уметь определять разрядность Excel (не разрядность Windows) на первых нескольких шагах установки, прежде чем файлы будут скопированы на целевую машину. Однако после некоторых обширных исследований в Интернете я не нашел надежного способа определения разрядности Excel. У кого есть идеи, пожалуйста, не стесняйтесь помочь. Спасибо


person wuxilixi    schedule 10.05.2013    source источник


Ответы (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
comment
Спасибо, Чарльз. Я заметил, что в Outlook есть значение Bitness, но, поскольку у меня установлен Outlook, я не был уверен, будет ли он по-прежнему доступен без Outlook. Итак, вы пробовали это с Outlook, который никогда не устанавливался? (Я хочу исключить ситуацию, когда Outlook был установлен, а затем удален, но оставить ключ реестра уже измененным) - person wuxilixi; 11.05.2013
comment
Да, это работает, даже если Outlook никогда не устанавливался. Я не проверял ситуацию, если Outlook установлен, а затем удален. - person Charles Williams; 11.05.2013

У меня была похожая дискуссия с пользователем Advanced Installer, вы можете ознакомиться с ней на наши форумы, пользователь хотел определить разрядность Office.

person Bogdan Mitrache    schedule 11.05.2013
comment
Вы не можете полагаться на раздел реестра 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