我有一个Excel加载项,我试图将自己安装到Excel加载项路径中。
加载项可以安装在两个位置之一,用户配置文件或MS Office安装中。
后者更可取,因为我不想让系统管理员担心新用户登录&看不到我的加载项。
然后是找到办公室安装路径的问题,你可以查找注册表项,但你需要查找excel guid,它可以有十几个+排列,从版本,体系结构,msi到点击运行等等(我找不到所有这些)。或者是已知办公室安装路径的预定义列表,也是十几个排列。
然后存在体系结构问题,32位加载项不会在64位办公室运行,反之亦然。
然后问题是办公室32位可以安装在64位程序文件中,谢谢微软!
所以我想出了以下批处理脚本。我担心还有其他办公室安装路径,我不知道......?
我正在尝试与Office 2007 - 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