2014-10-30 3 views
1

У меня есть первый файл bat, которому нужны права администратора, поэтому пользователь будет запускать его «Как администратор», тогда мой второй файл bat не должен иметь прав администратора (необходимо перетащить & drop from Explorer).Не удается сбросить повышенные права в файле bat

Я попытался открыть второй файл летучей мыши из первого со следующими командами, но я не могу перетащить & во второй, если первый из них начался как администратор.

runas /trustlevel:0x20000 "cmd /C %~dp0upload.bat" 

и

%~dp0upload.bat 

Как я могу это сделать?

UPDATE: полный код

@echo off &setlocal 
if not exist "MyFolder" GOTO :prog 
runas /trustlevel:0x20000 "cmd /C %~dp0upload.bat" 
exit /B 

:prog 
more code..... 
exit 

UPDATE 2: другие попытки

Использование

runas /trustlevel:0x20000 "call %~dp0upload.bat" 

выдает ошибку, как упоминалось here

UPDATE 3: с помощью VBS

Ok, мне удалось открыть первую партию в качестве обычного пользователя, а оттуда я вызываю другую летучую мышь с повышенными правами с помощью:

setlocal DisableDelayedExpansion 
set "batchPath=%~0" 
setlocal EnableDelayedExpansion 
ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp%\OEgetPrivileges.vbs" 
ECHO UAC.ShellExecute "temp.bat", "ELEV & !given_name!", "", "runas", 1 >> "%temp%\OEgetPrivileges.vbs" 
"%temp%\OEgetPrivileges.vbs" 

Теперь мне нужно передать !given_name! в второй файл bat, но я не уверен, как его передать и как получить его в этой второй битой.

ответ

1

Поведение является конструктивным, чтобы избежать рисков безопасности.
Can't drag programs into cmd window
Но в вашем случае это, кажется, немного параноик, как вы удалили privilegs ...

Но, возможно, вы можете изменить порядок подъема.
Вы можете запустить неэлектированную партию для своих операций перетаскивания &, и эта партия запускает ваш повышенный командный файл с помощью одного из методов повышения.

Вопрос о передаче переменной (given_name).

Сменить "ELEV & !given_name!" на "!given_name!" можно с помощью %1 от temp.bat.

SO: How can I auto-elevate my batch file...

+0

Проблема заключается в том, что пользователи не могут иметь пароль администратора и пользователей различаются все время. Поэтому им нужно «запустить как администратор» первую партию, которая не требует пароля. Я, наконец, отсоединил оба файла, поэтому мои пользователи будут запускать первую летучую мышь только один раз (запускать как admin), а в любое другое время запускать только вторую летучую мышь (без запуска в качестве администратора) – remyremy

+0

@remyremy В скрипте возвышения также не нужен пароль администратора (для «обычного» пользователя), только щелчок в окне сообщения uac – jeb

+0

Спасибо, сработало! Теперь мне нужно передать '! Given_name!' Во второй bat-файл, но я не уверен, как его передать и как получить его в этой второй битке.Я обновил свой вопрос – remyremy