找到Excel加载项库路径

找到Excel加载项库路径,excel,installation,add-in,Excel,Installation,Add In,我有一个Excel加载项,我正在尝试将其自身安装到Excel加载项路径中 外接程序可以安装在用户配置文件或MS office安装中的两个位置之一 后者更可取,因为我不想让系统管理员担心新用户登录&看不到我的加载项 然后是定位office安装路径的问题,您可以查找注册表项,但您需要查找excel guid,它可以有十几种排列,从版本、体系结构、msi到单击运行等(所有这些我都找不到)。或者是已知office安装路径的预定义列表,还是十几种排列 还有一个架构问题,32位插件无法在64位office上

我有一个Excel加载项,我正在尝试将其自身安装到Excel加载项路径中

外接程序可以安装在用户配置文件或MS office安装中的两个位置之一

后者更可取,因为我不想让系统管理员担心新用户登录&看不到我的加载项

然后是定位office安装路径的问题,您可以查找注册表项,但您需要查找excel guid,它可以有十几种排列,从版本、体系结构、msi到单击运行等(所有这些我都找不到)。或者是已知office安装路径的预定义列表,还是十几种排列

还有一个架构问题,32位插件无法在64位office上运行,反之亦然

还有一个问题是office 32位可以安装在64位程序文件中,谢谢微软

因此,我提出了以下批处理脚本。我担心还有其他我不知道的office安装路径关闭

我正在努力与Office2007-2016兼容

如果我忽略了什么,我将不胜感激

干杯

詹姆斯

@ECHO off

SET FROM=%1
SET FROM=%FROM:"=%

ECHO "installed in %FROM%"

SET INSTALLED=0

SET XLL_FILEx64=ChiefExcelInterfaceAddIn64-packed.xll
SET XLL_FILE=ChiefExcelInterfaceAddIn-packed.xll
SET PFx86=%ProgramFiles(x86)%

echo "PFx86=%PFx86%"

REM "32-bit OS"
IF "%PFx86%" == "" (
    SET PFx86=%ProgramFiles%
)


setlocal EnableDelayedExpansion

for %%x in ( 
"Microsoft Office\Office16"
"Microsoft Office\root\Office16"
"Microsoft Office 16\root\office16"
"Microsoft Office\Office15"
"Microsoft Office\root\office15"
"Microsoft Office 15\root\office15"
"Microsoft Office\Office14"
"Microsoft Office\root\office14"
"Microsoft Office 14\root\office14"
"Microsoft Office\Office12"
"Microsoft Office\root\office12"
"Microsoft Office 12\root\office12"
"Microsoft Office 16\ClientX86\Root\Office16"
"Microsoft Office 16\ClientX64\Root\Office16"
"Microsoft Office 15\ClientX86\Root\Office15"
"Microsoft Office 15\ClientX64\Root\Office15"
"Microsoft Office 14\ClientX86\Root\Office14"
"Microsoft Office 14\ClientX64\Root\Office14"
) do (
    REM echo %%x



    for %%y in (
"%ProgramW6432%"
"%PFx86%"
    ) do (
        SET "foo=%%y\%%x"
        SET foo=!foo:"=!

        REM echo !foo!

        IF EXIST "!foo!\Library" (
            ECHO "found it !foo!\Library"

            REM 64-bit excel.exe
            file\bin\file "!foo!\excel.exe" | find "PE32+"
            echo !errorlevel!

            IF !errorlevel! == 0 (
                ECHO COPY /Y "%FROM%\%XLL_FILEx64%" "!foo!\Library" 64-bit
                COPY /Y "%FROM%\%XLL_FILEx64%" "!foo!\Library"
                SET INSTALLED=1

            ) else (
                REM 32-bit excel.exe
                file\bin\file "!foo!\excel.exe" | find "PE32"
                echo !errorlevel!
                IF !errorlevel! == 0 (
                    ECHO COPY /Y "%FROM%\%XLL_FILE%" "!foo!\Library" 32-bit
                    COPY /Y "%FROM%\%XLL_FILE%" "!foo!\Library"
                    SET INSTALLED=1
                )
            )

        )
    )
)




echo %INSTALLED%
pause