Fichier de commandes pour exécuter des programmes en tant qu'administrateur - erreur 740

2

Je travaille sur un petit script de traitement par lots qui élève les programmes Windows de base pour qu'ils s'exécutent en tant qu'administrateur.

Toutes les fonctions fonctionnent bien, mais j'ai rencontré un problème en essayant d'exécuter "regedit.exe".

Lorsque l'option 3 est sélectionnée dans le script et qu'elle doit exécuter regedit en tant qu'administrateur, j'obtiens une erreur:

740: l'opération demandée nécessite une élévation.

Voici le script:

echo off
cls
echo.
echo Start as admin:
echo /----------------\
echo # 1. CMD         #
echo # 2. Task Manager#
echo # 3. Regedit     #
echo # 0. Exit        #
echo \----------------/
echo.

set /p run=

if %run%==1 (
set run="cmd"
)

if %run%==2 (
set run="taskmgr"
)

if %run%==3 (
set run="regedit"
)

if %run%==0 (
exit
)

runas /savecred /user:admin %run%

Y at-il une solution de contournement pour cela?

Je voudrais que cela fonctionne sans installer de programmes tiers, modifier le registre ou désactiver UAC.

Divin3
la source

Réponses:

4

Vous pouvez le faire en lançant une nouvelle invite CMD avec RunAs, que vous indiquez pour lancer votre commande.

Pour ce faire dans votre lot, modifiez la dernière ligne en:

runas /savecred /user:admin "cmd /c %run%"

Ƭᴇcʜιᴇ007
la source
PS: Départ choice /?. :)
cʜιᴇ007
J'ai une autre question. Depuis que j'ai implémenté votre méthode, la gestion des erreurs ne fonctionne pas. Ce que je veux dire par là, c'est que si la commande n'est pas reconnue, elle errorleveln'est plus définie 1car elle est exécutée dans une autre fenêtre. Existe-t-il un moyen de le redéfinir 1 s'il y a une faute de frappe dans l'entrée? (ce que je veux dire par là est: aucun numéro de choix ou commande CMD valide n'est donnée)
Divin3
2
Add this to the top of your Batch file and at the end just put %run% instead of (runas /savecred /user:admin %run%)


@echo off

:: BatchGotAdmin
:-------------------------------------
REM  --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

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

    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    pushd "%CD%"
    CD /D "%~dp0"
:--------------------------------------
NetworkKingPin
la source
1

Peut-être que cela peut aider, ou peut - être commencer le lot entier en tant qu'administrateur peut aider, faire en créant un autre script batch contenant:

runas /user:admin C:\Path_to_your_batch_file\name.bat
Sanglant
la source
La raison pour laquelle j'ai créé cela, c'est parce que le mot de passe administrateur est trop long et que je ne veux pas le taper à chaque fois, donc à cause de '/ savecred', je n'ai pas à le faire. J'ai essayé de créer une autre chauve-souris et de l'exécuter à partir de celle-ci. Il m'invite à saisir le mot de passe. Après l'avoir RUNAS ERROR: Unable to run - ...\regedit.bat -2147467259: Unspecified error
saisi
0
  1. Cliquez avec le bouton droit sur C: \ Windows \ regedit.exe et choisissez Propriétés.
  2. Dans l'onglet Compatibilité, choisissez "Exécuter ce programme en tant qu'administrateur".
bigfr0g
la source
C'est ce que je voulais éviter. Nous avons un mot de passe administrateur à 16 chiffres et le taper à chaque fois, même sur mon propre PC, est un peu gênant. Utiliser le /savecredn'aura qu'à taper une fois et c'est tout.
Divin3