Пакетный запуск от имени администратора всех пользователей - PullRequest
0 голосов
/ 05 июня 2018

Я работаю над автоматической автоматической установкой SQL 2008, 2012 и 2014, которая до сих пор работает с моей пакетной командой.Одна проблема, с которой я сталкиваюсь, заключается в том, что для правильного использования основной функции, которая есть в каждой программе (студии управления) в Windows 10, она должна запускаться с правами администратора.

В Windows 10 это можно сделатьвручную, открыв расположение файла ярлыка программы - щелкните правой кнопкой мыши - свойства - вкладка «совместимость» - «изменить настройки для всех пользователей» - установите флажок «запускать эту программу от имени администратора».Есть ли способ, чтобы пакетная команда проверила это поле?Таким образом, персоналу не нужно будет каждый раз запускать его вручную как администратор, он просто автоматически откроет Management Studio как администратор.

Ниже приведена моя пакетная команда для автоматизации установки.В начале находит установочные файлы, устанавливает пароль sa на все, что я хочу, и извлекает пользовательские настройки для установщика SQL из файла configurationfile.ini.Мне нужно, чтобы «запуск от имени администратора» для всех пользователей запускался после всего этого.

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

1 Ответ

0 голосов
/ 05 июня 2018
@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 с помощью полный путь к файлу в качестве 1-го аргумента и аргументы совместимости reg_data в качестве 2-го аргумента.Аргументы совместимости указаны в верхнем регистре и разделены пробелом.

Метка :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
...