3

Я не могу отключить UAC в Windows 7 и хочу изменить .exe для запуска в качестве администратора. Я могу щелкнуть правой кнопкой мыши на значке и перейти к совместимости, а затем изменить эту опцию через графический интерфейс, но я должен сделать .bat ..... Может кто-нибудь дать мне демо .bat.

4 ответа4

5

Щелкните правой кнопкой мыши файл BAT и нажмите « Создать ярлык». Ярлык появится. Вы можете отредактировать свойства ярлыка и настроить его на запуск от имени администратора. Конечно, вы должны запустить файл BAT через ярлык сейчас.

1

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

Если вы согласны связать такую утилиту с вашим bat-файлом (или установить его для всей системы), проверьте это: http://www.winability.com/elevate/

0

Другой метод - заставить пакетный файл вызывать VBscript, который затем повышает пакетный файл.

Вы можете скачать Elevate PowerToys, которые позволяют повышать пакетные файлы.

elevate -batchfile-

Другой способ - создать самоподъемный скрипт. Это может быть хрупким методом, но в основном он предполагает, что у вас есть доступ на запись к% temp%

Это модифицированная версия той, что здесь.

@ECHO OFF
::Ask for admin access
if exist "admincheckOK.txt" goto adminOK1
del /Q admincheckOK.vbs
ECHO.
ECHO. Please wait...
echo.Set objShell = CreateObject("Shell.Application") > %TEMP%\admincheckOK.vbs
echo.Set FSO = CreateObject("Scripting.FileSystemObject") >> %TEMP%\admincheckOK.vbs
echo.strPath = FSO.GetParentFolderName (WScript.ScriptFullName) >> %TEMP%\admincheckOK.vbs
echo.If FSO.FileExists(%0) Then >> %temp%\admincheckOK.vbs
echo. Dim oShell >> %TEMP%\admincheckOK.vbs
echo. Set oShell = WScript.CreateObject ("WScript.Shell") >> %TEMP%\admincheckOK.vbs
echo. oShell.run "cmd.exe /c echo admincheckOK > admincheckOK.txt" >> %TEMP%\admincheckOK.vbs
echo. Set oShell = Nothing >> %TEMP%\admincheckOK.vbs
echo. objShell.ShellExecute "cmd.exe", " /c " ^& %0 ^& " ", "", "runas", 1 >> %TEMP%\admincheckOK.vbs
echo.Else >> %TEMP%\admincheckOK.vbs
echo. MsgBox "Script file not found" >> %TEMP%\admincheckOK.vbs
echo.End If >> %TEMP%\admincheckOK.vbs
cscript //B %TEMP%\admincheckOK.vbs
goto theend

::Admin Access allowed
:adminOK1
del /Q admincheckOK.txt
del /Q admincheckOK.vbs

::**Body of Batchfile**
::**Code you want elevated**
pause

REM Following statement required if Admin access denied
:theend
del /Q admincheckOK.vbs
0

Для exe, если вы поместите манифест в ту же папку, что и exe, который запрашивает повышение прав, каждый раз, когда кто-либо запускает приложение, ему будет предложено его поднять. Удаление файла из папки вернет поведение в нормальное состояние.

Имя файла должно быть exename.exe.manifest, другими словами, если у вас есть foo.exe, вы должны назвать файл foo.exe.manifest. Содержимое должно выглядеть так:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <assemblyIdentity version="1.0.0.0"
            processorArchitecture="X86"
            name="appname"
            type="win32"/> 
<description>elevate execution level</description> 
   <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
      <security>
         <requestedPrivileges>
            <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
         </requestedPrivileges>
      </security>
   </trustInfo>
</assembly>

(Имя и описание не имеют значения, не стесняйтесь, чтобы они соответствовали вашему приложению. Или нет.)

Это не будет работать, если у exe-файла есть встроенный манифест, запрашивающий более низкий уровень выполнения, но будет работать для приложения без манифеста.

Я не уверен, почему вы хотите включить и выключить этот пакетный файл, но вы можете легко сделать это, переименовав этот пакетный файл в foo.exe.notmanifest и вернув его в foo.exe.manifest.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .