如果可执行文件尚不存在,如何安装 32 位或 64 位可执行文件?
How to install 32-bit or 64-bit executable if executable does not already exist?
在检查了正确的处理器类型后,我尝试了两种脚本变体来安装可执行文件。我相信可执行文件运行,但由于某种原因它无法检查文件是否已经存在。我会post都在这里。
有人可以帮忙吗?
@echo on
if /i "%processor_architecture%"=="x86" (
if exist "C:\Program Files\Credential Wizard\CredentialWizard.exe" (
echo ***App is Installed Successfully***
) else (\srvfs01.flymyrtlebeach.com\deployment$\Software\Nervepoint\nam-creds-provider-windows-x86-2.0.4.exe -q)
) else if /i "%processor_architecture%"=="X64" (
if exist "C:\Program Files (x86)\Credential Wizard\CredentialWizard.exe" (
echo ***App is Installed Successfully***
) else (\srvfs01.flymyrtlebeach.com\deployment$\Software\Nervepoint\nam-creds-provider-windows-x64-2.0.4.exe -q)
)
exit
或者这个
@echo off
Set RegQry=HKLM\Hardware\Description\System\CentralProcessor[=11=]
REG.exe Query %RegQry% | Find /i "x86"
If %ERRORLEVEL% == 0 (
GOTO X86
) ELSE (
GOTO X64
)
:X86
IF NOT EXIST "C:\Program Files\Credential Wizard\CredentialWizard.exe"(start \srvfs01.flymyrtlebeach.com\deployment$\Software\Nervepoint\nam-creds-provider-windows-x86-2.0.4.exe -q)
GOTO END
:X64
IF NOT EXIST "C:\Program Files (x86)\Credential Wizard\CredentialWizard.exe"(start \srvfs01.flymyrtlebeach.com\deployment$\Software\Nervepoint\nam-creds-provider-windows-x64-2.0.4.exe -q)
:End
exit
我建议阅读 Microsoft 文档页面
批处理文件可以在目录
中由cmd.exe
在64位Windows上执行
%SystemRoot%\System32
(x64) 或
%SystemRoot%\SysWOW64
(x86)
使用哪个cmd.exe
取决于调用批处理文件的应用程序的体系结构。一个 32 位安装程序可执行文件 运行 批处理文件导致批处理文件被 32 位 Windows 命令处理器解释,因此批处理文件 运行s 在 32 位环境中如在 32 位 Windows 上甚至在 64 位 Windows.
上执行
出于这个原因,用于安装 32 位或 64 位应用程序的批处理文件需要始终首先找出它在哪个环境中由哪个操作系统执行。
此外,PC CPU 的架构无关紧要。它可以是 x64 处理器,但安装的仍然是 32 位 Windows。在这种情况下,无法使用 64 位应用程序,尽管 CPU 会支持它们,因为安装的 Windows 不支持它们。
还有一些必须考虑的其他事实:
是否有在安装过程中创建的受 WOW64 影响的注册表项?
在这种情况下,当前在 64- 32 位环境中执行的批处理文件会更好位 Windows 在执行安装之前在 64 位环境中再次启动。
安装程序执行的批处理文件是否在 cmd.exe
后立即继续执行批处理文件?
在这种情况下,批处理文件的执行是必要的32 位 cmd.exe
暂停,直到 64 位 cmd.exe
在 64 位 Windows 上完成批处理文件在 64 位环境中的执行,然后退出而不在 32 位中执行任何操作环境。
我建议使用这个批处理文件来完成你的任务:
@echo off
rem Is the batch file executed by 32-bit cmd.exe on 32-bit Windows?
if "%ProgramFiles(x86)%" == "" goto DoInstall
rem Is the batch file executed by 64-bit cmd.exe on 64-bit Windows?
if not exist "%SystemRoot%\Sysnative\cmd.exe" goto DoInstall
rem Run this batch file by 64-bit instead of 32-bit cmd.exe on 64-bit Windows.
rem This simple method works only if batch file is executed without arguments.
"%SystemRoot%\Sysnative\cmd.exe" /C "%~f0"
rem Exit batch file executed by 32-bit cmd.exe on 64-bit Windows
rem after 64-bit cmd.exe finished execution of the batch file.
goto EndBatch
:DoInstall
rem echo Processor architecture: %PROCESSOR_ARCHITECTURE%
rem echo Program files directory: %ProgramFiles%
rem echo Common program files: %CommonProgramFiles%
if exist "%ProgramFiles%\Credential Wizard\CredentialWizard.exe" goto Installed
if not "%ProgramFiles(x86)%" == "" if exist "%ProgramFiles(x86)%\Credential Wizard\CredentialWizard.exe" goto Installed
rem When \srvfs01.flymyrtlebeach.com\deployment$\Software\Nervepoint\
rem contains always just one installer executable for 32-bit and one for
rem for 64-bit, let the batch file use that one independent on its version
rem number in file name.
for %%I in ("\srvfs01.flymyrtlebeach.com\deployment$\Software\Nervepoint\nam-creds-provider-windows-%PROCESSOR_ARCHITECTURE%-*.exe") do (
copy /V "%%I" "%TEMP%\%%~nxI"
"%TEMP%\%%~nxI" -q
del "%TEMP%\%%~nxI"
goto ReCheck
)
:ReCheck
if exist "%ProgramFiles%\Credential Wizard\CredentialWizard.exe" goto Installed
if not "%ProgramFiles(x86)%" == "" if exist "%ProgramFiles(x86)%\Credential Wizard\CredentialWizard.exe" goto Installed
echo === ERROR: App installation failed. ===
echo/
pause
goto EndBatch
:Installed
echo *** App is installed successfully. ***
:EndBatch
注意: 我在 运行 nam-creds-provider-windows-x86-2.0.4.exe
或 nam-creds-provider-windows-x64-2.0.4.exe
中添加了一个 FOR 循环或任何其他 nam-creds-provider-windows-x*-*.exe
在可执行文件的版本 2.0.4 被更新版本替换的情况下。
批处理文件即使在禁用命令扩展的情况下也能正常工作。
要了解使用的命令及其工作原理,请打开命令提示符 window,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。
cmd /?
echo /?
exit /?
for /?
goto /?
if /?
pause /?
rem /?
PS: 运行 %SystemRoot%\System32\cmd.exe
例如双击此文件和 运行 set pro
。让 64 位命令提示符 window 打开并从 Windows Explorer %SystemRoot%\SysWOW64\cmd.exe
接下来 运行 也双击此文件并 运行 set pro
在 32 位命令提示符下 window。比较两个命令提示符中的输出环境变量 windows.
在检查了正确的处理器类型后,我尝试了两种脚本变体来安装可执行文件。我相信可执行文件运行,但由于某种原因它无法检查文件是否已经存在。我会post都在这里。
有人可以帮忙吗?
@echo on
if /i "%processor_architecture%"=="x86" (
if exist "C:\Program Files\Credential Wizard\CredentialWizard.exe" (
echo ***App is Installed Successfully***
) else (\srvfs01.flymyrtlebeach.com\deployment$\Software\Nervepoint\nam-creds-provider-windows-x86-2.0.4.exe -q)
) else if /i "%processor_architecture%"=="X64" (
if exist "C:\Program Files (x86)\Credential Wizard\CredentialWizard.exe" (
echo ***App is Installed Successfully***
) else (\srvfs01.flymyrtlebeach.com\deployment$\Software\Nervepoint\nam-creds-provider-windows-x64-2.0.4.exe -q)
)
exit
或者这个
@echo off
Set RegQry=HKLM\Hardware\Description\System\CentralProcessor[=11=]
REG.exe Query %RegQry% | Find /i "x86"
If %ERRORLEVEL% == 0 (
GOTO X86
) ELSE (
GOTO X64
)
:X86
IF NOT EXIST "C:\Program Files\Credential Wizard\CredentialWizard.exe"(start \srvfs01.flymyrtlebeach.com\deployment$\Software\Nervepoint\nam-creds-provider-windows-x86-2.0.4.exe -q)
GOTO END
:X64
IF NOT EXIST "C:\Program Files (x86)\Credential Wizard\CredentialWizard.exe"(start \srvfs01.flymyrtlebeach.com\deployment$\Software\Nervepoint\nam-creds-provider-windows-x64-2.0.4.exe -q)
:End
exit
我建议阅读 Microsoft 文档页面
批处理文件可以在目录
中由cmd.exe
在64位Windows上执行
%SystemRoot%\System32
(x64) 或%SystemRoot%\SysWOW64
(x86)
使用哪个cmd.exe
取决于调用批处理文件的应用程序的体系结构。一个 32 位安装程序可执行文件 运行 批处理文件导致批处理文件被 32 位 Windows 命令处理器解释,因此批处理文件 运行s 在 32 位环境中如在 32 位 Windows 上甚至在 64 位 Windows.
出于这个原因,用于安装 32 位或 64 位应用程序的批处理文件需要始终首先找出它在哪个环境中由哪个操作系统执行。
此外,PC CPU 的架构无关紧要。它可以是 x64 处理器,但安装的仍然是 32 位 Windows。在这种情况下,无法使用 64 位应用程序,尽管 CPU 会支持它们,因为安装的 Windows 不支持它们。
还有一些必须考虑的其他事实:
是否有在安装过程中创建的受 WOW64 影响的注册表项?
在这种情况下,当前在 64- 32 位环境中执行的批处理文件会更好位 Windows 在执行安装之前在 64 位环境中再次启动。安装程序执行的批处理文件是否在
cmd.exe
后立即继续执行批处理文件?
在这种情况下,批处理文件的执行是必要的32 位cmd.exe
暂停,直到 64 位cmd.exe
在 64 位 Windows 上完成批处理文件在 64 位环境中的执行,然后退出而不在 32 位中执行任何操作环境。
我建议使用这个批处理文件来完成你的任务:
@echo off
rem Is the batch file executed by 32-bit cmd.exe on 32-bit Windows?
if "%ProgramFiles(x86)%" == "" goto DoInstall
rem Is the batch file executed by 64-bit cmd.exe on 64-bit Windows?
if not exist "%SystemRoot%\Sysnative\cmd.exe" goto DoInstall
rem Run this batch file by 64-bit instead of 32-bit cmd.exe on 64-bit Windows.
rem This simple method works only if batch file is executed without arguments.
"%SystemRoot%\Sysnative\cmd.exe" /C "%~f0"
rem Exit batch file executed by 32-bit cmd.exe on 64-bit Windows
rem after 64-bit cmd.exe finished execution of the batch file.
goto EndBatch
:DoInstall
rem echo Processor architecture: %PROCESSOR_ARCHITECTURE%
rem echo Program files directory: %ProgramFiles%
rem echo Common program files: %CommonProgramFiles%
if exist "%ProgramFiles%\Credential Wizard\CredentialWizard.exe" goto Installed
if not "%ProgramFiles(x86)%" == "" if exist "%ProgramFiles(x86)%\Credential Wizard\CredentialWizard.exe" goto Installed
rem When \srvfs01.flymyrtlebeach.com\deployment$\Software\Nervepoint\
rem contains always just one installer executable for 32-bit and one for
rem for 64-bit, let the batch file use that one independent on its version
rem number in file name.
for %%I in ("\srvfs01.flymyrtlebeach.com\deployment$\Software\Nervepoint\nam-creds-provider-windows-%PROCESSOR_ARCHITECTURE%-*.exe") do (
copy /V "%%I" "%TEMP%\%%~nxI"
"%TEMP%\%%~nxI" -q
del "%TEMP%\%%~nxI"
goto ReCheck
)
:ReCheck
if exist "%ProgramFiles%\Credential Wizard\CredentialWizard.exe" goto Installed
if not "%ProgramFiles(x86)%" == "" if exist "%ProgramFiles(x86)%\Credential Wizard\CredentialWizard.exe" goto Installed
echo === ERROR: App installation failed. ===
echo/
pause
goto EndBatch
:Installed
echo *** App is installed successfully. ***
:EndBatch
注意: 我在 运行 nam-creds-provider-windows-x86-2.0.4.exe
或 nam-creds-provider-windows-x64-2.0.4.exe
中添加了一个 FOR 循环或任何其他 nam-creds-provider-windows-x*-*.exe
在可执行文件的版本 2.0.4 被更新版本替换的情况下。
批处理文件即使在禁用命令扩展的情况下也能正常工作。
要了解使用的命令及其工作原理,请打开命令提示符 window,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。
cmd /?
echo /?
exit /?
for /?
goto /?
if /?
pause /?
rem /?
PS: 运行 %SystemRoot%\System32\cmd.exe
例如双击此文件和 运行 set pro
。让 64 位命令提示符 window 打开并从 Windows Explorer %SystemRoot%\SysWOW64\cmd.exe
接下来 运行 也双击此文件并 运行 set pro
在 32 位命令提示符下 window。比较两个命令提示符中的输出环境变量 windows.