J'écris un programme de vérification client/serveur, mais il doit être exécuté en tant qu'administrateur.
Je souhaite que cette application s'exécute en mode silencieux sur mon réseau et mes utilisateurs, et je ne souhaite pas que l'invite "Exécuter en tant qu'administrateur" existe-t-il un code de début que je peux placer dans le fichier de commandes pour le faire exécuter automatiquement en tant qu'administrateur?
Non: la solution - créer un raccourci [-> Compatibilité -> "exécuter ce programme en tant qu'administrateur"] ne fonctionne pas.
Cette option est grisée dans Windows 7. Même avec le contrôle de compte d'utilisateur désactivé
Non: le runas /env /user:domain\Administrator <program.exe/command you want to execute>
est également insuffisant car il invite l'utilisateur à entrer le mot de passe administrateur.
Oui: Désactiver le contrôle de compte d'utilisateur -> Créer un travail à l'aide du planificateur de tâches, cela a fonctionné pour moi.
Vous pouvez ensuite laisser le script activer le contrôle de compte d'utilisateur en modifiant le registre, si vous le souhaitez. Dans mon cas, ce script est exécuté une seule fois par la création d'une machine virtuelle Windows, où le contrôle de compte d'utilisateur est désactivé dans l'image.
Nous attendons toujours la meilleure approche pour un script exécuté en tant qu'administrateur sans trop de problèmes.
@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`
c'est possible en utilisant la syntaxe:
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 USER@DOMAIN or DOMAIN\USER
(USER@DOMAIN is not compatible with /netonly)
Program The command to execute
exemple :
runas /env /user:domain\Administrator <program.exe/command you want to execute>
Voici une solution de contournement:
L'exécution du raccourci exécutera votre script batch en tant qu'administrateur.
Vous avez plusieurs options.
Si vous devez le faire en utilisant uniquement un fichier de commandes et des commandes natives, consultez Comment puis-je élever automatiquement mon fichier de commandes de sorte qu'il demande les droits d'administrateur de l'UAC si nécessaire? .
Si des utilitaires tiers sont une option, vous pouvez utiliser un outil tel que Elevate . C'est un exécutable que vous appelez avec le programme que vous voulez exécuter en tant que paramètre élevé.
Comme ceci: elevate net share ...
.
J'ai légèrement modifié le script de Matt pour lui permettre de s'exécuter à partir d'un seul script (il suffit de l'ajouter au début de tout script nécessitant une invocation UAC), mais lisez ci-dessous le code pour une solution encore meilleure que celle que j'ai trouvée sur un Blog:
:: ### 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 ###
Comme vous pouvez le constater, ma modification utilise deux arguments de fichier, ce qui n’est pas particulièrement élégant, mais fait le travail (et vous pouvez toujours les cacher à la fin en réservant les premiers arguments à l’aide d’emplacements fictifs). De plus, le script de AFAIK Matt ne prend pas en charge les espaces dans les chemins de fichiers et cette limitation s'applique également à ma modification de ce script.
Ce problème semble être inhérent à la façon dont VBS gère ces chemins, mais sur le lien ci-dessous, il existe une solution encore meilleure basée sur VBS pour appeler un contrôle de compte d'utilisateur qui s'exécute à partir d'un seul script sans nécessiter de solution de contournement comme celle-ci, à l'aide des arguments de fichier et qui prend également en charge les espaces dans les chemins de fichiers:
http://pcloadletter.co.uk/2012/12/11/uac-elevation-for-batch-script/
Le script sur ce lien effectue des appels VBS légèrement différents, comme vous le remarquerez, ce qui, pour une raison quelconque, contourne le problème des espaces.
Créez un raccourci et configurez-le pour qu'il soit toujours exécuté en tant qu'administrateur.
How-To Geek forum Créez un fichier de commandes pour exécuter cmd en tant qu'administrateur solution:
Créez un fichier de commandes dans un éditeur et nommez-le puis créez un raccourci vers celui-ci. Nameit.bat - raccourci. Cliquez ensuite avec le bouton droit sur Nameit.bat - raccourci -> Propriétés -> onglet Raccourci -> Avancé et cliquez sur Exécuter en tant qu’administrateur. Exécutez-le depuis le raccourci.
Comme je n'ai pas encore trouvé de script simple, voici mes deux sous:
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
Vous pourriez le mettre comme élément de démarrage ... Les éléments de démarrage ne présentent pas d'invite à exécuter en tant qu'administrateur.
Voir cet article Raccourci de programme surélevé sans UAC rompt
Ne perdez pas votre temps, utilisez cette commande d'une ligne pour exécuter la ligne de commande en tant qu'administrateur:
echo createobject("Shell.application").shellexecute "cmd.exe",,,"runas",1 > runas.vbs & start /wait runas.vbs & del /f runas.vbs
si vous voulez démarrer une application avec des privilèges d’administrateur, il vous suffit d’écrire le chemin d’accès pour cette application comme ce bloc-notes ++ dans mes fichiers de programme, par exemple:
echo createobject("Shell.application").shellexecute "%programfiles%\Notepad++\notepad++.exe",,,"runas",1 > runas.vbs & start /wait runas.vbs
Ma solution, si vous n'avez pas besoin du fichier .bat, est de convertir le fichier de commandes en fichier .exe, vous pourrez alors configurer le programme en tant qu'administrateur.
Si toutes les réponses ci-dessus ne vous conviennent pas, vous pouvez utiliser autoIT pour exécuter votre fichier (ou autre) en tant qu'utilisateur spécifique avec ses informations d'identification.
Exemple de script qui exécutera un programme utilisant les privilèges de cet utilisateur.
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 peut être trouvé ici. -> Il utilise un format .ua3 compilé en un fichier .exe pouvant être exécuté.