Определить офисную разрядность - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть файл install.bat, написанный для меня кем-то.Необходимо установить приложение на основе разрядности MSOffice на клиентском терминале.Также необходимо запустить установочный файл драйвера клиента SQL на основе разрядности Windows.

Часть SQL работает нормально.Но он постоянно устанавливает 32-битную версию приложения вместо 64-битной, когда у меня определенно установлена ​​64-битная офисная установка (тестировали на 2 компьютерах с 64-битной офисной версией).Я уверен, что эксперт сможет просмотреть код и быстро сказать мне, в чем проблема.Это не моя область знаний, но я знаю, что это не очень сложно.В папке установки есть папки с именами Source32 и Source64.Два 32-битных приложения в Source32 и два 64-битных приложения в папке Source64.Он извлекает их из соответствующей папки и помещает в созданную папку в корневом каталоге (C: \ QuickSuite).У меня есть только очень смутное представление о том, на что я смотрю, поэтому я даже не уверен, что попробовать.

@Echo off&SetLocal
Set "KEY="&Set "GUID="&Set "IOV="&Set "MWB=32"&Set "MOB=32"
Echo=%PROCESSOR_ARCHITECTURE% %PROCESSOR_ARCHITEW6432%|Find "64">Nul&&(
   Set "KEY=\Wow6432Node"&Set "MWB=64")
Set "KEY=HKLM\Software%KEY%\Microsoft\Windows\CurrentVersion\Uninstall"
For /f "Delims=" %%a In ('Reg Query %KEY% /k /f "*-001B-*0FF1CE}"') Do (
   If Not Defined GUID Set "GUID=%%~nxa")
If Not Defined GUID (Echo=Unable to find Office Product&GoTo :EndIt)
If %GUID:~20,1% Equ 1 Set "MOB=64"
If %GUID:~4,1% Equ 4 (Set IOV=10) Else (If %GUID:~4,1% Equ 6 (Set IOV=16) Else (If %GUID:~4,1% Equ 2 (Set IOV=07) Else (
      If %GUID:~4,1% Equ 5 (Set IOV=13) Else (Set IOV=??))))
Echo=&Echo= Office 20%IOV% %MOB%-bit Product installed on a %MWB%-bit OS
If %MWB% == 64 (
@Echo Windows 64-bit...
msiexec /i "%~dp0sql64\sqlncli_x64.msi" IACCEPTSQLNCLILICENSETERMS=YES /qb
)
If %MWB% == 32 (
@Echo Windows 32-bit...
msiexec /i "%~dp0sql32\sqlncli_x86.msi" IACCEPTSQLNCLILICENSETERMS=YES /qb
)
cd %~dp0
SET _source64=.\Source64
SET _source32=.\Source32
SET _dest=%systemdrive%\QuickSuite
SET _FrontOffice=.\FrontOffice
SET _RemoteSMS=.\RemoteSMS
SET _dest_RemoteSMS=%systemdrive%\QuickSuite\RemoteSMS
SET _dest_FrontOffice=%systemdrive%\QuickSuite\FrontOffice

If %MOB% == 64 (
@echo Microsoft Office is 64-bit 
robocopy %_source64% %_dest% /E
robocopy %_FrontOffice% %_dest_FrontOffice% /E
robocopy %_RemoteSMS% %_dest_RemoteSMS% /E
)
If %MOB% == 32 (
@echo Microsoft Office is 32-bit 
robocopy %_source32% %_dest% /E
robocopy %_FrontOffice% %_dest_FrontOffice% /E
robocopy %_RemoteSMS% %_dest_RemoteSMS% /E
)
:EndIt
TimeOut /t 5 1>Nul

1 Ответ

0 голосов
/ 23 апреля 2019

Вот возможный пример, основанный на предоставленном вами коде и том, что, я думаю, вы пытаетесь с ним сделать:

@Echo Off
If Defined PROCESSOR_ARCHITEW6432 (
    Start "" /D "%__CD__%" "%SystemRoot%\SysNative\cmd.exe" /C "%~f0"&Exit /B)
Set /A "OSA=MWB=%PROCESSOR_ARCHITECTURE:~-2%"
If %OSA%==86 Set "MWB=32"

For %%A In (MSIExec Reg RoboCopy)Do Set "%%A=%__AppDir__%%%A.exe"
Echo Windows %MWB%-bit...
"%MSIExec%" /i "%~dp0sql%MWB%\sqlncli_x%OSA%.msi" IACCEPTSQLNCLILICENSETERMS=YES /qb

Call :Chk
If Not Defined MOB If %OSA%==64 Call :Chk \Wow6432Node
If Not Defined MOB (Echo Office Product not installed&GoTo :EndIt)
Echo Microsoft Office %MOB%-bit Product is installed
"%RoboCopy%" "%~dp0Source%MWB%" "%SystemDrive%\QuickSuite" /E
"%RoboCopy%" "%~dp0FrontOffice" "%SystemDrive%\QuickSuite\FrontOffice" /E
"%RoboCopy%" "%~dp0RemoteSMS" "%SystemDrive%\QuickSuite\RemoteSMS" /E

:Endit
Timeout 5 /NoBreak>Nul
GoTo :EOF

:Chk
Set "MOB="&Set "GUID="
Set "Key=HKLM\Software%1\Microsoft\Windows\CurrentVersion\Uninstall"
For /F Delims^= %%A In ('""%REG%" Query "%Key%" /K /F "*-001B-*0FF1CE}""'
)Do Set "GUID=%%~nxA"&GoTo :Next
:Next
If Not "%GUID:~-1%"=="}" Set "GUID="
If Not Defined GUID Exit /B
Set "MOB=32"&If "%GUID:~20,1%"=="1" Set "MOB=64"
Exit /B
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...