Je dois exécuter un fichier batch qui doit enregistrer une DLL. L'enregistrement de la DLL échoue parce que le fichier batch ne démarre pas l'invite de commande en tant qu'"administrateur".
Existe-t-il un moyen de lancer l'invite de commande en tant qu'administrateur par le biais du fichier batch ?
Environnement : Win7/Vista
Vous devrez peut-être utiliser d'abord un autre fichier batch pour lancer le second avec des droits d'administrateur.
Dans le premier, utilisez
runas /noprofile /user:mymachine\administrator yourbatchfile.bat
Après lecture, vous devez être capable de taper le mot de passe à l'invite. Vous ne pouvez pas taper le mot de passe car cette fonction a été verrouillée pour des raisons de sécurité.
Vous aurez peut-être plus de chance avec [psexec][1].
[1] : http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx
(Ceci est basé sur la réponse de @DarkXphenomenon's, qui présentait malheureusement quelques problèmes).
Vous devez enfermer votre code dans ce wrapper:
if _%1_==_payload_ goto :payload
:getadmin
echo %~nx0: elevating self
set vbs=%temp%\getadmin.vbs
echo Set UAC = CreateObject^("Shell.Application"^) >> "%vbs%"
echo UAC.ShellExecute "%~s0", "payload %~sdp0 %*", "", "runas", 1 >> "%vbs%"
"%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs"
goto :eof
:payload
echo %~nx0: running payload with parameters:
echo %*
echo ---------------------------------------------------
cd /d %2
shift
shift
rem put your code here
rem e.g.: perl myscript.pl %1 %2 %3 %4 %5 %6 %7 %8 %9
goto :eof
Cela permet au fichier batch de s'exécuter en tant qu'utilisateur élevé. Il ajoute deux paramètres au code privilégié:
le mot payload
, pour indiquer qu'il s'agit d'un appel payload, c'est à dire déjà élevé. Sinon
Sinon, il ne ferait qu'ouvrir de nouveaux processus encore et encore.
Le chemin du répertoire où le script principal a été appelé. En raison du fait que Windows lance toujours toujours, Windows démarre un cmd.exe élevé dans "%windir%\system32" ;, il n’y a pas de moyen facile de connaître le chemin le chemin d'origine (et de conserver la possibilité de copier votre script sans toucher au code). sans toucher au code)
Note: Malheureusement, pour une raison quelconque, shift
ne fonctionne pas pour %*
, donc si vous devez
si vous devez passer des arguments réels, vous devrez utiliser la notation laide que j'ai utilisée
dans l'exemple (%1 %2 %3 %4 %5 %6 %7 %8 %9
), qui apporte également la limite de
maximum de 9 arguments
Vous pouvez utiliser un raccourci qui renvoie au fichier batch. Il suffit d'aller dans les propriétés du raccourci et de sélectionner avancé, puis "exécuter en tant qu'administrateur" ;.
Ensuite, il suffit de masquer le fichier batch et d'exécuter le raccourci.
De cette façon, vous pouvez même définir votre propre icône pour le raccourci.