IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Exécuter en tant que ... [FAQ]


Sujet :

C++Builder

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2002
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2002
    Messages : 23
    Points : 26
    Points
    26
    Par défaut Exécuter en tant que ...
    Bonjour,
    Je dois exécuter sur différents postes (donc avec des configs différentes) des exécutables. Les chemins d'accès de ces derniers sont stockés dans une base de données. Jusqu'ici ça va.
    Pour les exécuter, j'utilise le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (FileExists(AnsiString(PATH_SHARED)+"\\"+SMInfo_file))
       {
          AnsiString x;
          ShellExecute(0, static_cast<const char*>(x.data()), AnsiString(AnsiString(PATH_SHARED)+"\\"+ SMInfo_file).c_str(), NULL, NULL, SW_SHOWMINNOACTIVE);
       }
    PATH_SHARED correspond au chemin d'accès.
    SMInfo_file correspond au nom du fichier à exécuter.
    Or certains EXE nécessitent d'être en Administrateur. Comment puis-je faire pour leur communiquer mes login et mot de passe ? Même si ils sont à inscrire en dur dans l'exe, peu importe, du moment que l'utilisateur n'a pas à les saisir.
    Merci d'avance pour toute info.

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2002
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2002
    Messages : 23
    Points : 26
    Points
    26
    Par défaut
    J'ai bien trouvé un moyen en utilisant la commande RUNAS accessible sous Win2k et WinXP, mais cette commande nécessite de rentrer le mot de passe du compte utilisateur transmis en argument. Impossible donc d'obtenir un lancement entièrement "silencieux" pour un utilisateur lambda disposant de droits restreints.
    Si quelqu'un a une idée, je suis preneur. :o

  3. #3
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 59
    Points : 84
    Points
    84
    Par défaut
    Il existe une astuce un peu tordu....
    Dans un premier temps tu fais une tache planifier qui a les droit admin sur la machine dans cette tache tu fais executer un fichier bat du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    si le prg toto.exe est present alors executer toto.exe sinon ... la suite.
    c'est un chouette code !!!!!!
    et tu met ton prg a la place de toto.exe .....

    apres pour afiner tous ca tu peut dire a ta tache planifier de s'executer qu'une seul fois ou a chaque demarrage....

    si tu cherche un peut avec les script de login de tes user ou de tes machine tu doit pouvoir fair ca en automatique depuis ton serv et
    comme tu est administrateur de ton domaine :-) tu doit pouvoir fabriquer les taches planifier sur les machines distantes depuis ton canape (depuis ton poste de travail)...

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Points : 1 608
    Points
    1 608
    Par défaut
    Regarde du côté de CreateProcessAsUser :

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createprocessasuser.asp

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2002
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2002
    Messages : 23
    Points : 26
    Points
    26
    Par défaut
    J'essaye d'utiliser CreateProcessAsUser, mais cette méthode nécessite un Primary Token dans son argument HANDLE hToken.
    J'utilise donc la méthode LogonUser pour acquérir ce handle, mais sans succès. Le hToken reste toujours à NULL. Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    HANDLE wToken = NULL;
       int iAns = LogonUser("nom_user", "domain_user", "pwd_user", LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, &wToken);
    Je suis scrupuleusement la doc trouvée sur MSDN, mais sans succès.
    http://msdn.microsoft.com/library/de.../logonuser.asp
    http://msdn.microsoft.com/library/de...cessasuser.asp

    Quelqu'un a-t-il une idée ?

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2002
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2002
    Messages : 23
    Points : 26
    Points
    26
    Par défaut
    Peut-être pourrais-je m'en sortir tout simplement en utilisant la méthode CreateProcessWithLogonW dont voici la doc :
    http://msdn.microsoft.com/library/de...withlogonw.asp
    Affaire à suivre ...

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2002
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2002
    Messages : 23
    Points : 26
    Points
    26
    Par défaut
    Ca y est, j'ai enfin trouvé (ouf !) 8)
    Et voici le code pour ceux que ça intéresse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
       // Laisser les L devant les chaînes de caractères, ils permettent de les
       // caster directement en LPCWSTR
       // Pour info : après plusieurs tentatives, ni le login ni le password ne sont
       // lisibles en clair dans l'EXE après la compilation.
       // Pour plus d'info sur la méthode CreateProcessWithLogonW, consulter la doc
       // consultable sur MSDN.
       LPCWSTR lpUsername = L"fverneau";      // saisir le login du user
       LPCWSTR lpDomain = L"GT75";            // définir le domaine du user, "." pour l'ordinateur local
       LPCWSTR lpPassword = L"c+jsp@gt89-";   // saisir le mot de passe du user
       LPCWSTR lpApplicationName = L"\\\\parns006\\gestparc$\\Client.exe";  // Chemin et application à exécuter
       WCHAR szCommandLine[] = {L""};   // paramètres à passer en ligne de commande
       DWORD dwCreationFlags = NULL;
       LPVOID lpEnvironment = NULL;
       LPCWSTR lpCurrentDirectory = NULL;     // Possibilité d'indiquer un répertoire d'exécution (par défaut le même répertoire que le répertoire de l'application a exécuter)
       STARTUPINFOW lpStartupInfo;
       PROCESS_INFORMATION lpProcessInfo;
     
       memset(&lpStartupInfo, 0, sizeof(lpStartupInfo));  // réservation de la mémoire pour StartupInfo
       memset(&lpProcessInfo, 0, sizeof(lpProcessInfo));  // réservation de la mémoire pour ProcessInfo
       lpStartupInfo.cb = sizeof(lpStartupInfo);
     
       if(!CreateProcessWithLogonW(           // la méthode, enfin ...
          lpUsername,
          lpDomain,
          lpPassword,
          LOGON_WITH_PROFILE,
          lpApplicationName,
          szCommandLine,
          dwCreationFlags,
          lpEnvironment,
          lpCurrentDirectory,
          &lpStartupInfo,
          &lpProcessInfo))
       {                                      // En cas d'erreur un message est affiché contenant la cause exacte de l'erreur.
          LPVOID lpMsgBuf;
          FormatMessage(
             FORMAT_MESSAGE_ALLOCATE_BUFFER |
             FORMAT_MESSAGE_FROM_SYSTEM |
             FORMAT_MESSAGE_IGNORE_INSERTS,
             NULL,
             GetLastError(),
             MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
             (LPTSTR) &lpMsgBuf,
             0,
             NULL);
          MessageBox(NULL, (LPCTSTR)lpMsgBuf, NULL, MB_OK | MB_ICONEXCLAMATION);
          LocalFree(lpMsgBuf);                // Libération du pointeur du message d'erreur
       }
       CloseHandle(lpProcessInfo.hProcess);   // libération de Process créé par CreateProcessWithLogonW
       CloseHandle(lpProcessInfo.hThread);    // libération du thread principal créé par CreateProcessWithLogonW
    Et bien voilà un thread rudement mené.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB6] "Exécuter en tant que" automatiquement un exe
    Par Asdorve dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 17/03/2010, 08h36
  2. Tomcat : problème d'exécution en tant que service
    Par Aurélien78 dans le forum Tomcat et TomEE
    Réponses: 7
    Dernier message: 10/12/2009, 11h47
  3. Réponses: 2
    Dernier message: 29/08/2008, 14h17
  4. Réponses: 2
    Dernier message: 23/11/2007, 11h46
  5. Comment exécuter "en tant que" (RunAs) ?
    Par PierreT dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 21/09/2005, 17h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo