Execas (runas en batch)

Soyez le premier à donner votre avis sur cette source.

Vue 29 799 fois - Téléchargée 3 030 fois

Description

J'ai écrit cet utilitaire pour remplacer l'utilitaire Microsoft RunAs qui permet de démarrer des programmes sur des comptes utilisateurs différents (surtout en tant qu'administrateur), avec validation du login sur des domaines différents que celui en cours. La commande RunAs ne permettant pas de passer le mot-de-passe de l'utilisateur en paramètre (pour des questions évidentes de sécurité), cet utilitaire ne peut pas être utilisé en mode batch. Pour remédier à ce problème, j'ai développé cet utilitaire qui permet de passer le mot-de-passe en clair (texte) ou crypté. Je l'utilise par exemple pour installer des services sous XP (sans que le login soit effectué en mode "administrateur"), mais son utilisation peut être multiple. J'ai essayé de commenter le code le mieux possible (en anglais, mais je pense que tout le mode pourra comprendre - même si j'ai reçu des remarques concernant l'utilisation de cette langue...)
Pour comprendre le lancement du programme, veuillez consulter les fichiers Upgrade.cmd (lancement d'un programme avec les droits d'administrateur) ou le fichier ExecAs.txt pour des informations sur les paramètres.

Utilisation du code libre, bien évidement...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
51
Date d'inscription
mercredi 29 septembre 2004
Statut
Membre
Dernière intervention
7 juillet 2010

Salut !
Même problème pour moi que Raymondub.
Avec les droits du système, pas possible d'utiliser CreateProcessWithLogonW !
Si quelqu'un a une solution, je suis preneur à 200%.
Mode recherche = On
Msgbox "Comment faire ?????"
Mode recherche = Off
;-)
Messages postés
5
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
14 juin 2007

Salut,
c'est génial comme code, ça m'a beaucoup aidé à solutionner une partie de mon problème.
J'avais un service qui tournait avant sur windows 2000 server en localsystem qui doit créer un process (CreateProcessWithLogon) dans un contexte particulier.
Ca fonctionnait nickel jusqu'à ce que je doive migrer l'application sur un serveur 2003.
J'ai vu que je dois utiliser maintenant CreateProcessWithLogonW et ton appli permet de switcher d'un serveur 2000 à 2003 facilement.
A partir d'un exe tout simple, ça fonctionne nickel.
Mais quand je veux créer mon process avec CreateProcessWithLogonW à partir de mon service, ça ne va pas... Le service démarre correctement mais mon application qui devrait être exécutée par CreateProcessWithLogonW ne démarre pas et j'ai un return code CreateProcessWithLogonW() failed with error 5.
Une idée ?
J'ai lu http://support.microsoft.com/kb/285879/fr ceci "CreateProcessWithLogonW ne peut pas être appelé à partir d'un processus sous le compte LocalSystem."
Mais je ne vois pas d'alternative.. Si j'utilise la méthode qui était utilisée avec NT4, j'ai un problème avec mon formulaire, il ne s'affiche pas correctement
Messages postés
8
Date d'inscription
mercredi 3 septembre 2003
Statut
Membre
Dernière intervention
21 mai 2008

Pour répondre a JELLOGUIL
Tu peux l'inclure en fichier ressource, demarrer sur une sub Main dans un module, et extraire le fichier voulu contenu dans la ressource pour le copier dans le rep système, bien entendu le prog doit être lancé avec les droits pour cela.
Messages postés
1
Date d'inscription
mercredi 6 décembre 2006
Statut
Membre
Dernière intervention
7 décembre 2006

J'aime bien l'utilité que je pourrais faire avec ce script, mais là j'ai un autre petit problème. Les postes que je veux exécuter ce script n'ont pas vb6fr.dll dans Windows\system. Alors comment faire pour le rendre accessible. vu que mes utilisateurs ne peuvent pas écrire dans ce dossier je ne peux donc pas aller le copier à cette endroit.

Merci
Messages postés
13
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
9 septembre 2011

Ah, j'oubliais : le programme retourne le status, qui peut être traité par ERRORLEVEL en mode batch :
0 --> OK
1 --> Erreur

Ceci peut être testé comme cela :

EXECAS <Commande>
IF ERRORLEVEL 1 GOTO ERROR
IF ERRORLEVEL 0 GOTO OK
:OK
<Commande>
GOTO END
:ERROR
<Commande>
:END

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.