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

VB 6 et antérieur Discussion :

[VB6] Exécuter un programme en tant que... [Trucs & Astuces]


Sujet :

VB 6 et antérieur

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 28
    Points : 8
    Points
    8
    Par défaut [VB6] Exécuter un programme en tant que...
    Bonjour,

    suite a mon probleme d hier (ICI)

    j ai utilisé l API Createprocesswithlogon j ai un probleme pour l argument startupinfo : Type d argument byref incomptatible j ai tenté pas mal de truc mais la je séche...
    voici mon code :

    ds un module :
    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
     
    Private Const SW_SHOWNORMAL = 1
    Private Const LOGON_WITH_PROFILE = &H1&
    Private Const LOGON_NETCREDENTIALS_ONLY = &H2&
    Private Const CREATE_DEFAULT_ERROR_MODE = &H4000000
    Private Const CREATE_NEW_CONSOLE = &H10&
    Private Const CREATE_NEW_PROCESS_GROUP = &H200&
    Private Const CREATE_SEPARATE_WOW_VDM = &H800&
    Private Const CREATE_SUSPENDED = &H4&
    Private Const CREATE_UNICODE_ENVIRONMENT = &H400&
    Private Const ABOVE_NORMAL_PRIORITY_CLASS = &H8000&
    Private Const BELOW_NORMAL_PRIORITY_CLASS = &H4000&
    Private Const HIGH_PRIORITY_CLASS = &H80&
    Private Const IDLE_PRIORITY_CLASS = &H40&
    Private Const NORMAL_PRIORITY_CLASS = &H20&
    Private Const REALTIME_PRIORITY_CLASS = &H100&
     
    Public Type STARTUPINFO
         cb As Long
         lpReserved As String
         lpDesktop As String
         lpTitle As String
         dwX As Long
         dwY As Long
         dwXSize As Long
         dwYSize As Long
         dwXCountChars As Long
         dwYCountChars As Long
         dwFillAttribute As Long
         dwFlags As Long
         wShowWindow As Integer
         cbReserved2 As Integer
         lpReserved2 As Long
         hStdInput As Long
         hStdOutput As Long
         hStdError As Long
    End Type
     
    Public Type PROCESS_INFORMATION
         hProcess As Long
         hThread As Long
         dwProcessID As Long
         dwThreadID As Long
    End Type
     
    Declare Function CreateProcessWithLogon Lib "Advapi32" Alias "CreateProcessWithLogonW" (ByVal lpUsername As Long, ByVal lpDomain As Long, ByVal lpPassword As Long, ByVal dwLogonFlags As Long, ByVal lpApplicationName As Long, ByVal lpCommandLine As Long, ByVal dwCreationFlags As Long, ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, lpStartupInfo As STARTUPINFO, lpProcessInfo As PROCESS_INFORMATION) As Long
    et ds ma form :

    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
     
    Private Sub Form_Load()
    TB_Nb_Echantillons.Text = Configuration.L_Nb_Echantillons_Fluox.Caption
    TB_Nb_Echantillons_ICP.Text = Configuration.L_Nb_Echantillons_ICP.Caption
    TB_Repertoire_Courant.Text = Configuration.L_Rep_Courant
    L_Nb_Elems.Caption = Configuration.L_Nb_Intnsity
     
     
     
    Dim Startup As STARTUPINFO
    Dim ProcessInf As PROCESS_INFORMATION
    Dim return_value As Long
    Dim app_to_run As String
    Startup.cb = Len(Startup)
    lpDomain = "."  'C'est ce qu'il faut mettre pour XP
    lpUsername = "bob"
    lpPassword = "bob"
    'app_to_run = App.Path & "CelVal.exe" 'On veut lancer Half life par exemple
    lpApplicationName = App.Path & "CelVal.exe"
    lpCommandLine = vbNullString
    lpCurrentDirectory = vbNullString
    'Login = "bob" 'Nom du compte sur lequel on veut se logger
    'Pass = "bob"    'Mot de passe pour ce compte
     
    return_value = CreateProcessWithLogon(StrPtr(lpUsername), StrPtr(lpDomain), StrPtr(lpPassword), LOGON_WITH_PROFILE, StrPtr(lpApplicationName), StrPtr(lpCommandLine), CREATE_DEFAULT_ERROR_MODE Or CREATE_NEW_CONSOLE Or CREATE_NEW_PROCESS_GROUP, ByVal 0&, StrPtr(lpCurrentDirectory), StartInfo, ProcessInfo)
     
     
    End Sub

  2. #2
    Membre à l'essai
    Inscrit en
    Août 2003
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    essaye de passer ton argument ByVal
    Il vaut mieux se perdre dans sa passion que perdre sa passion
    Tandis qu’on diffère de vivre, la vie court. (Sénèque)
    Soeur Marie-Endeavour du couvent des Hespérides
    Resistante aussi!!! Non mais!!

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 28
    Points : 8
    Points
    8
    Par défaut
    Deja tenté marche pas : Les types crée par l utilisateur ne peuvent etre passe par valeur

  4. #4
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 335
    Points : 332
    Points
    332
    Par défaut
    c'est quoi StartInfo????????????????
    La connaissance est la seule chose qui s'accroit lorsqu'on la partage.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 28
    Points : 8
    Points
    8
    Par défaut
    C est un pointeur qui permet de definir l apparence de la fenetre du nouveau process :

    lpStartupInfo
    Pointer to a STARTUPINFO structure that specifies how the main window for the new process should appear.

    (allapi.net)

    J ai tenté sans ms c est un parametre obligatoire.

  6. #6
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 335
    Points : 332
    Points
    332
    Par défaut
    ce que je voulais dire c'est que je ne vois pas sa declaration je ne vois qu'une variable nomme startup
    La connaissance est la seule chose qui s'accroit lorsqu'on la partage.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 28
    Points : 8
    Points
    8
    Par défaut
    En faite tu as raisons j ai mis les bon noms de variables ( le boulet ), mais je retrouve le prob que j avait avant que je commence a faire des modification.
    C est a dire qu'a l execution c est un beau message d erreur me disant que Vb a genere des erreurs et qu il va etre fermé et qu un journal des errerus est en cour de creation..

  8. #8
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 335
    Points : 332
    Points
    332
    Par défaut
    je croix la que les parametre passe a l'api sont errone ou ta structure manque de donne
    reconsulte des exp d'utilisation de cet api voila un bon site
    http://allapi.net/
    La connaissance est la seule chose qui s'accroit lorsqu'on la partage.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 28
    Points : 8
    Points
    8
    Par défaut
    C est de ce site que vient tt le code pour l api CreateProcessWithLogon j ai tt recopie et suivi leurs instructions c est pour ca que je ne comprend pas ce quise passe ...

  10. #10
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 335
    Points : 332
    Points
    332
    Par défaut
    désole de ne pas pouvoir t'aider pour le moment s'il ya un peux de temps je vais essayer de l'utiliser et je vais te poster ca mais si tu trouve qque chose n'oublie pas de communiquer ta soluce
    La connaissance est la seule chose qui s'accroit lorsqu'on la partage.

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 28
    Points : 8
    Points
    8
    Par défaut
    ok.
    en faite ca compile bien le prob c est a l execution soit vb plante si je le fait de Vb soit c est l exe genere qui plante

  12. #12
    HPJ
    HPJ est déconnecté
    Membre averti

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2003
    Messages : 260
    Points : 364
    Points
    364
    Par défaut
    Tu utilises Len(nombre de caractères) au lieu de LenB(nombre d'octets dans la chaîne) et en VB (unicode) 1 caractère = 2 octets -> Erreur sur la taille mémoire -> VB plante.
    Avant de poser une question, merci de chercher dans les rubriques suivantes:
    FAQ VB
    Tutoriaux VB
    Recherche avancée sur le forum

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 28
    Points : 8
    Points
    8
    Par défaut
    Merci ca fonctionne Sauf que le programme se lance une trentaine de fois et certaine execution de l appli peuvent modifier le fichier et d autres pas

  14. #14
    HPJ
    HPJ est déconnecté
    Membre averti

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2003
    Messages : 260
    Points : 364
    Points
    364
    Par défaut
    Tu dois avoir plusieurs exécutions simultanées du même programme: Tu peux gérer ce problème avec App.PrevInstance ou bien en ne lançant pas le programme tantque l'appel précédent ne s'est pas terminé.
    Avant de poser une question, merci de chercher dans les rubriques suivantes:
    FAQ VB
    Tutoriaux VB
    Recherche avancée sur le forum

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 28
    Points : 8
    Points
    8
    Par défaut
    En faite j ai juste recopier le code que tu avais mis.
    je fais voir pour ce que tu m as dit .
    au cas je te montre mon code des fois qu une enormemite s y soit glissé.

    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
     
    Private Sub Form_Load()
     
    Dim lpUsername As String, lpDomain As String, lpPassword As String, lpApplicationName As String
    Dim lpCommandLine As String, lpCurrentDirectory As String
    Dim StartInfo As STARTUPINFO, ProcessInfo As PROCESS_INFORMATION
    Dim start_ As Boolean
    On Error GoTo erreur
     
    TB_Nb_Echantillons.Text = Configuration.L_Nb_Echantillons_Fluox.Caption
    TB_Nb_Echantillons_ICP.Text = Configuration.L_Nb_Echantillons_ICP.Caption
    TB_Repertoire_Courant.Text = Configuration.L_Rep_Courant
    L_Nb_Elems.Caption = Configuration.L_Nb_Intnsity
    start_ = True
     
    If start_ = True Then
     
    lpUsername = "Administrateur"
    lpDomain = "."
    lpPassword = "pwd"
    lpApplicationName = App.Path & "\CelVal.exe"
    lpCommandLine = vbNullString 'use the same as lpApplicationName
    lpCurrentDirectory = vbNullString 'use standard directory
    StartInfo.cb = LenB(StartInfo) 'initialize structure
    StartInfo.dwFlags = 0&
    CreateProcessWithLogon StrPtr(lpUsername), StrPtr(lpDomain), StrPtr(lpPassword), LOGON_WITH_PROFILE, StrPtr(lpApplicationName), StrPtr(lpCommandLine), CREATE_DEFAULT_ERROR_MODE Or CREATE_NEW_CONSOLE Or CREATE_NEW_PROCESS_GROUP, ByVal 0&, StrPtr(lpCurrentDirectory), StartInfo, ProcessInfo
    start_ = False
    CloseHandle ProcessInfo.hThread 'close the handle to the main thread, since we don't use it
    CloseHandle ProcessInfo.hProcess 'close the handle to the process, since we don't use it
    'note that closing the handles of the main thread and the process do not terminate the process
    'unload this application
    End If
     
    fin:
    Exit Sub
    erreur:
        Proc_Erreur
    Resume fin
     
    End Sub
    les declarations et les structures sont ds un module j ai rien modifié par rapport a ton code sauf que j ai tt mis en public

  16. #16
    HPJ
    HPJ est déconnecté
    Membre averti

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2003
    Messages : 260
    Points : 364
    Points
    364
    Par défaut
    Le code que j'avais mis n'était qu'un copier/coller de l'exemple de allapi.net...
    Maintenant, ton problème est de ne pas exécuter ce code plusieurs fois en même temps.
    Avant de poser une question, merci de chercher dans les rubriques suivantes:
    FAQ VB
    Tutoriaux VB
    Recherche avancée sur le forum

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 28
    Points : 8
    Points
    8
    Par défaut
    Bon maintenant le prog ne lance qu une fois ms je ne peut tjs pas ecrire ds le fichier, alors qu en admin je peut c est dc l histoire des droits.

  18. #18
    HPJ
    HPJ est déconnecté
    Membre averti

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2003
    Messages : 260
    Points : 364
    Points
    364
    Par défaut
    Et si tu te loggues en administrateur ton programme fonctionne :
    Avant de poser une question, merci de chercher dans les rubriques suivantes:
    FAQ VB
    Tutoriaux VB
    Recherche avancée sur le forum

  19. #19
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 28
    Points : 8
    Points
    8
    Par défaut
    oui en admin tt fonctionne correctement
    en simple utilisateur j ai une erreur du type :"erreur 75".
    mais ce qui est bizarre c est que tt l heure qd il y a avait une 30 d instance du prog les dernieres pouvait modifier le fichier ms pas les 1ere ...

  20. #20
    HPJ
    HPJ est déconnecté
    Membre averti

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2003
    Messages : 260
    Points : 364
    Points
    364
    Par défaut
    En fait, tu as un programme qui met à jour le fichier et un autre (le "lanceur") qui exécute ce programme en tant qu'Administrateur, c'est bien çà :

    Es-tu sûr que le lanceur attend la fin du programme afin de se terminer :

    Peux-tu donner quelques lignes et l'erreur exacte :
    Avant de poser une question, merci de chercher dans les rubriques suivantes:
    FAQ VB
    Tutoriaux VB
    Recherche avancée sur le forum

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Programme en tant que service sous Windows Seven
    Par saraza dans le forum Windows 7
    Réponses: 0
    Dernier message: 29/06/2011, 11h44
  2. Exécuter mon programme en tant que service
    Par tonymx15 dans le forum Windows
    Réponses: 3
    Dernier message: 04/12/2010, 12h04
  3. Executer un programme en tant que
    Par poussin_44 dans le forum VB.NET
    Réponses: 2
    Dernier message: 30/08/2007, 09h58
  4. Réponses: 3
    Dernier message: 15/05/2006, 09h49
  5. s'amuser dans la programmation en tant que métier ?
    Par Bruno75 dans le forum Etudes
    Réponses: 9
    Dernier message: 02/02/2006, 21h36

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