2013-02-01 26 views
14

Piszę program sprawdzający klient/serwer, ale musi on działać jako administrator. Chcę, aby to działało bezgłośnie w mojej sieci i użytkownikach, a nie chcę wyświetlać monitu "Uruchom jako administrator" Czy istnieje kod początkowy, który można umieścić w pliku wsadowym, aby był uruchamiany automatycznie jako administrator/Skrypt wsadowy uruchamiany jako administrator

Odpowiedz

13

NOPE - The - utwórz skrót [-> Kompatybilność -> "uruchom ten program jako administrator"] rozwiązanie nie działa.

Ta opcja jest nieaktywna w systemie Windows 7. Nawet z UAC niepełnosprawnych

-

Nope - The "runas/env/user: domena \ Administrator"

również nie jest wystarczająca ponieważ monituje użytkownika o hasło administratora.

-

TAK - Wyłącz UAC -> Utwórz zadanie za pomocą Harmonogramu zadań

Ten pracował dla mnie: utworzyć zadanie pod harmonogramu zadań i uczynić ją uruchomić jako użytkownik z uprawnieniami administratora. zaznaczyć Jawnie: „Uruchom z najwyższymi uprawnieniami” Wyłącz UAC więc nie będzie szybka, aby uruchomić to zadanie

można pozwolić skrypt włączyć UAC potem przez edycję rejestru, jeśli byś chciał. W moim przypadku ten skrypt jest uruchamiany tylko raz przez utworzenie wirtualnej maszyny systemu Windows, w której funkcja UAC jest wyłączona w obrazie.

Nadal czekamy na najlepsze podejście do skryptu uruchamianego jako administrator bez większych kłopotów.

+1

UAC część Wyłącz UAC C: \ Windows \ System32 \ cmd.exe/k% windir% \ System32 \ reg.exe ADD HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Policies \ System/v EnableLUA/t REG_DWORD/d 0/f Włącz UAC C: \ Windows \ System32 \ cmd.exe/k% windir% \ System32 \ reg.exe DODAJ HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Policies \ System/v EnableLUA/t REG_DWORD/d 1/f – zenin

4

jego możliwe przy użyciu składni:

RUNAS [/profile] [/env] [/netonly] /user:user Program 

Key : 
/profile Option to load the user's profile (registry) 
/env Use current environment instead of user's. 
/netonly Use the credentials specified only for remote connections. 
/user Username in form [email protected] or DOMAIN\USER 
([email protected] is not compatible with /netonly) 
Program The command to execute 

przykładem.

runas /env /user:domain\Administrator <program.exe/command you want to execute> 
+10

Spowoduje to monit o podanie hasła, którego nie chce. – eddyq

+0

@eddyq Prawda, jednak to odpowiada na pytanie, nawet jeśli treść pytania zmienia to, co powiedział, że chce. – leetNightshade

+0

Tytuł nie jest pytaniem. Tekst podstawowy jest pytaniem. Tytuł jest tytułem. Ciało ma pierwszeństwo, ponieważ zawiera szczegóły. –

0

Można umieścić go w pozycji startowej ... pozycje startowe nie pojawi się monit, aby uruchomić jako administrator w ogóle.

Sprawdź ten artykuł Elevated Program Shortcut Without UAC rompt

+0

Odpowiedzi na przepełnienie stosu nie powinny zawierać "Google, aby znaleźć odpowiedź". –

+0

Przepraszam, moje złe. Edycja – sandrows

+0

Lepiej teraz, dzięki. –

1

Utwórz skrót i ustawić skrót zawsze Uruchom jako administrator.

How-To Geek forum Make a batch file to run cmd as administrator rozwiązanie:

Zrób plik wsadowy w edytorze i nameit.bat następnie utworzyć skrót do niego. Nameit.bat - skrót. następnie kliknij prawym przyciskiem myszy Nameit.bat - skrót -> Właściwości-> zakładka Skrót -> Zaawansowane i kliknij Uruchom jako administrator. Wykonaj go ze skrótu.

+2

Nie można ustawić irytująco "Uruchom jako administrator" na pliku wsadowym lub na skrót wskazujący na to. – StormPooper

+1

Nie można ustawić go w pliku wsadowym - ale ** można ** ustawić na skrócie, wskazując na niego – icc97

1

Ponieważ nie znalazłem żadnego prostego skryptu tak daleko, oto moje dwa centy:

set ELEVATE_APP=Full command line without parameters for the app to run 
set ELEVATE_PARMS=The actual parameters for the app 
echo Set objShell = CreateObject("Shell.Application") >elevatedapp.vbs 
echo Set objWshShell = WScript.CreateObject("WScript.Shell") >>elevatedapp.vbs 
echo Set objWshProcessEnv = objWshShell.Environment("PROCESS") >>elevatedapp.vbs 
echo objShell.ShellExecute "%ELEVATE_APP%", "%ELEVATE_PARMS%", "", "runas" >>elevatedapp.vbs 
DEL elevatedapp.vbs 

Pozdrowienia,

Nika.

0

Jeśli powyższe odpowiedzi nie odpowiadają Twoim potrzebom, możesz użyć funkcji autoIT do uruchomienia pliku (lub dowolnego pliku) jako określonego użytkownika z jego danymi uwierzytelniającymi.

Przykładowe skrypty, które będą uruchamiać program korzystający z wersji privelages.

installAdmin() 

Func installAdmin() 
    ; Change the username and password to the appropriate values for your system. 
    Local $sUserName = "xxxxx" 
    Local $sPassword = "xxx" 
    Local $sDirectory = "C:\ASD4VM\Download\" 
    Local $sFiletoRun = "Inst_with_Privileges.bat" 

    RunAsWait($sUserName, @ComputerName, $sPassword, 0, $sDirectory & $sFiletoRun) 
EndFunc ;==>Example 

AutoIT can be found here. -> Używa .ua3 format, który jest kompilowany do pliku .exe, który można uruchomić.

1

Zrobiłem ten niewielki modyfikację scenariusza Matta, aby umożliwić jej uruchomić z poziomu pojedynczego skryptu (tylko dodać to na początku każdego skryptu wymagającego UAC inwokację), ale przeczytać poniżej kodu na jeszcze lepsze rozwiązanie, że” ve znaleźć na blogu:

:: ### START UAC SCRIPT ### 

if "%2"=="firstrun" exit 
cmd /c "%0" null firstrun 

if "%1"=="skipuac" goto skipuacstart 

:checkPrivileges 
NET FILE 1>NUL 2>NUL 
if '%errorlevel%' == '0' (goto gotPrivileges) else (goto getPrivileges) 

:getPrivileges 
if '%1'=='ELEV' (shift & goto gotPrivileges) 

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

:gotPrivileges 

setlocal & pushd . 

cd /d %~dp0 
cmd /c "%0" skipuac firstrun 
cd /d %~dp0 

:skipuacstart 

if "%2"=="firstrun" exit 

:: ### END UAC SCRIPT ### 

:: ### START OF YOUR OWN BATCH SCRIPT BELOW THIS LINE ### 

Moja modyfikacja wykorzystuje dwa argumenty plików, jak widać, co nie jest szczególnie elegancki, ale robi to zadanie (i zawsze można ukryć je na końcu ogona zastrzegając pierwszy kilka argumentów używających zastępczych symboli zastępczych). Dodatkowo skrypt AFAIK Matt nie obsługuje spacji w ścieżkach plików, a to ograniczenie dotyczy także mojej modyfikacji tego skryptu.

Ten problem wydaje się być nierozerwalnie związany ze sposobem, w jaki VBS obsługuje te ścieżki, ale na poniższym linku znajduje się jeszcze lepsze rozwiązanie oparte na VBS do wywoływania UAC uruchamianego z poziomu jednego skryptu bez potrzeby obejścia takiego problemu z użyciem pliku argumenty i że obsługuje również przestrzenie w ścieżkach plików:

http://pcloadletter.co.uk/2012/12/11/uac-elevation-for-batch-script/

skrypt ten link sprawia nieco inne VBS połączeń jak zauważysz, które z jakiegoś powodu omija problem ze spacjami.

4
@echo off 

call :isAdmin 

if %errorlevel% == 0 (
    goto :run 
) else (
    echo Requesting administrative privileges... 
    goto :UACPrompt 
) 

exit /b 

:isAdmin 
    fsutil dirty query %systemdrive% >nul 
exit /b 

:run 
    <YOUR BATCH SCRIPT HERE> 
exit /b 

:UACPrompt 
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" 
    echo UAC.ShellExecute "cmd.exe", "/c %~s0 %~1", "", "runas", 1 >> "%temp%\getadmin.vbs" 

    "%temp%\getadmin.vbs" 
    del "%temp%\getadmin.vbs" 
    exit /B` 
+0

To doskonale sprawdza się dla mnie. Dzięki. – Emad

1

Poniżej znajduje się obejść:

  1. Tworzenie skrótu pliku .bat
  2. Otwórz właściwości od skrótu. W zakładce skrótów kliknij kliknij zaawansowany.
  3. Tick "Uruchom jako administrator"

Running skrót będzie wykonywał skrypt wsadowy jako administrator.

Powiązane problemy