0

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

在 Windows 10 中,这可以通过打开程序快捷方式的文件位置手动完成 - 右键单击​​ - 属性 - “兼容性”选项卡 - “更改所有用户的设置” - 选中“以管理员身份运行此程序”框。有没有办法让批处理命令选中该框?这样员工就不需要每次都以管理员身份手动运行它,它只会以管理员身份自动打开 Management Studio。

我的批处理命令可以在下面找到以自动安装。开头找到安装文件,将 sa 密码设置为我想要的任何密码,然后从 configurationfile.ini 文件中提取 SQL 安装程序的自定义设置。我需要所有用户“以管理员身份运行”才能运行。

start "" "%~dp0SQL2008\setup.exe" /SAPWD="XXXXXXXX" /ConfigurationFile="ConfigurationFile.ini" /quiet
4

1 回答 1

0
@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兼容性参数作为第二个参数。兼容性参数是大写的,并用空格分隔。

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

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

@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
于 2018-06-05T16:19:53.053 回答