以管理员身份批处理 运行 所有用户

Batch run as administrator all users

我正在对 SQL 2008、2012 和 2014 进行无人值守的自动安装,目前正在使用我的批处理命令。我遇到的一个问题是,为了在 Windows 10 上正确使用每个程序(管理工作室)中的核心功能,它需要 运行 作为管理员。

在Windows10中可以手动打开程序快捷方式的文件位置-右键-属性-"compatibility"选项卡-"change settings for all users"-勾选"run this program as an administrator"。有没有办法让批处理命令选中该框?这样员工就不需要每次都以管理员身份手动 运行 它,它只会以管理员身份自动打开 Management Studio。

可以在下面找到我的批处理命令来自动安装。首先找到安装文件,将 sa 密码设置为我想要的任何值,然后从 configurationfile.ini 文件中提取 SQL 安装程序的自定义设置。毕竟,我需要所有用户的 "run as an admin" 到 运行。

start "" "%~dp0SQL2008\setup.exe" /SAPWD="XXXXXXXX" /ConfigurationFile="ConfigurationFile.ini" /quiet
@echo off
setlocal

call :reg_compat "C:\User\Test\test.exe" "WINXPSP3 RUNASADMIN"
if errorlevel 1 echo Registry write failed.

exit /b

:reg_compat  fullpath, reg_data
setlocal
set "reg_key=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"
set "reg_data="

:: Get current registry data.
for /f "tokens=1,2*" %%A in ('2^>nul reg query "%reg_key%" /v "%~1"') do (
    if /i "%%~A" == "%~1" set "reg_data=%%~C"
)

:: Write new entry and exit.
if not defined reg_data (
    >nul reg add "%reg_key%" /v "%~1" /d "%~2" /f
    if errorlevel 1 exit /b 1
    exit /b 0
)

:: Copy original registry data.
set "reg_data_original=%reg_data%"

:: Append new data if not in original registry data.
for %%A in (%~2) do (
    set "value_exist="

    for %%B in (%reg_data_original%) do (
        if "%%~A" == "%%~B" set "value_exist=1"
    )

    if not defined value_exist (
        call set "reg_data=%%reg_data%% %%~A"
    )
)

:: Continue only if registry data is modified.
if "%reg_data_original%" == "%reg_data%" exit /b 0

:: Write modified entry and exit.
>nul reg add "%reg_key%" /v "%~1" /d "%reg_data%" /f
if errorlevel 1 exit /b 2
exit /b 0

代码设置为编写测试入口。测试条目将添加 Windows XP SP3运行 作为管理员 该文件路径的兼容性。

对于实际使用,更改参数以调用标签 :reg_compat 将文件的 完整路径 作为第一个参数, reg_data 兼容性参数作为第二个参数。这 兼容性参数是大写的,并用 space.

分隔

标签:reg_compat将写入新条目或更新条目 添加新的兼容性参数。来自被叫的 errorlevel 如果 reg add 失败,则标签设置为非 0。

如果您只需要,请使用最少的代码:

@echo off
setlocal

set "reg_key=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"
reg add "%reg_key%" /v "C:\User\Test\test.exe" /d "WINXPSP3 RUNASADMIN" /f