Run AS en VB6.0

jl205 Messages postés 13 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 24 mars 2010 - 16 janv. 2008 à 17:05
jl205 Messages postés 13 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 24 mars 2010 - 19 janv. 2008 à 10:35
Tout d'abord bonjour à tous.


Voici le problème :

    - j'utilise la fonction "CreateProcessWithLogon"
pour exécuter différent logiciel sur Windows XP en tant que administrateur.

    - mon problème vient du panneau de configuration
("C:\Windows\System32\control.exe")





Voici mon code :


return_value =
CreateProcessWithLogon(StrPtr(strLogin), StrPtr(lpDomain), StrPtr(strPwd),
LOGON_WITH_PROFILE, StrPtr(strApp), StrPtr(lpCommandLine),
CREATE_DEFAULT_ERROR_MODE, ByVal 0&, StrPtr(lpCurrentDirectory), Startup,
ProcessInf)




J'ai fais plusieurs essais dans strPath.
Je lui ai affecté comme valeur :


1: "c:\windows\system32\control.exe"


Ca n’a pas fonctionné.





2: "c:\windows\system32\cmd.exe"

Puis, la fonction qui saisie du texte dans a console dos

Public Sub SendKey(ByVal strChar)

    Set WShell = CreateObject("WScript.Shell")

    WShell.SendKeys (strChar)

End Sub


la commande suivante est envoyée dans <st1:personname productid="la console DOS" w:st="on">la console DOS</st1:personname> grâce à SendKey :

    explorer.exe "C:\windows\system32\control.exe"



 




BOUMMM ca ne marche pas enfin pas tout à fait. Dans le
gestionnaire de processus, le control.exe apparait bien avec l’utilisateur
désiré mais ne s’affiche pas et se termine tout seul.
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->



Voici ce que j’ai essayé sous dos et dans un .BAT (codes,
commandes). Et ca fonctionne :





 




control.exe


explorer.exe “c:\windows\system32\control.exe”



 




Alors j’ai eu l’idée (je ne sais pas si elle est lumineuse)
de convertir les .BAT en .EXE vu que <st1:personname productid="la commande CreateProcessWithLogon" w:st="on">la commande CreateProcessWithLogon</st1:personname>ne
lance que des exécutables. Et la à ma grande tristesse l’Exe qui viens d’être
créer se lance bien mais aucune fenêtre n’apparait.




 






Avez-vous une idée ? Une
fonction ? Un p’tit truc pour m’aider à rediriger mes recherches peut être ?

8 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
16 janv. 2008 à 21:11
0
jl205 Messages postés 13 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 24 mars 2010
17 janv. 2008 à 11:27
Merci pour ta réponse mais ca ne m'a servi à rien. Ca ne m'aide pas du tout.

Est ce que quelqu'un pourai m'expliquer autre chose par la même occasion?

J'ai utilisé Environ("SystemRoot") pour que le changement entre 2000 et XP (C:\WINNT et C:\Windows) se fasse tout seul. Sous 2000 tout fonctionne et pas sous XP. Est ce qu'entre XP et 2000 il y a un changement à faire pour renseigner la fonction CreateProcessWithLogon?
0
jl205 Messages postés 13 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 24 mars 2010
18 janv. 2008 à 09:08
Me revoilou. Je vous envoye directement le code complet peut etre que ce sera plus clair :

1ER morceau de code:
Public Sub Start(strPath As String)
    Dim strLogin As String, strPwd As String
    On Error GoTo LnError
    strLogin = Form1.txtLogin.Text
    strPwd = Form1.txtPwd.Text
    If strLogin <> "" Then
        Set oNet = CreateObject("WScript.Network")
        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 = oNet.ComputerName
        lpCommandLine = vbNullString
        lpCurrentDirectory = vbNullString
        return_value = CreateProcessWithLogon(StrPtr(strLogin), StrPtr(lpDomain), StrPtr(strPwd), LOGON_WITH_PROFILE, StrPtr(strPath), StrPtr(lpCommandLine), CREATE_DEFAULT_ERROR_MODE, ByVal 0&, StrPtr(lpCurrentDirectory), Startup, ProcessInf)
    End If
    Exit Sub
LnError:
    MsgBox "Veuillez vérifier si le login et le mot de passe sont correctement saisies.", vbCritical, "Erreur critique"
    Exit Sub
End Sub

Ca me permet, de vérifier s'il y a un login, de lancer un exe en tant que le login choisi. Je pense que ca coule de source .

2EME morceau de code:
    Set WShell = CreateObject("WScript.Shell")
    WShell.SendKeys (strChar)

Simule la saisie au clavier.

3EME morceau de code:
Private Sub cmdExplorer_Click()
    sCommande = "explorer"
    Start strWindows & "\System32\cmd.exe"
    Sleep (500)      'Fonction attend 500 milisecondes avant de continuer.
    SendKey (sCommande & "{enter}")
    SendKey ("exit{enter}")
End Sub

Lance la console DOS en Admin puis saisie "explorer" dans la console. Logiquement vu que la console est en administrateur tout ce que lance la console doit etre en ADMIN. Mais ca ne marche pas.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
18 janv. 2008 à 09:29
donne moi tes declarations APIs également, stp
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jl205 Messages postés 13 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 24 mars 2010
18 janv. 2008 à 09:52
Oui pas de soucis :

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

Voici mes déclarations APIs
0
jl205 Messages postés 13 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 24 mars 2010
18 janv. 2008 à 09:58
Je viens de voir un truc dans "3EME morceau de code" :

Private Sub cmdExplorer_Click()
    sCommande = "explorer"
    strWindows = Environ("SystemRoot")

    Start strWindows & "\System32\cmd.exe"
    Sleep (500)      'Fonction attend 500 milisecondes avant de continuer.
    SendKey (sCommande & "{enter}")
    SendKey ("exit{enter}")
End Sub

Merci beaucoup pour ton aide.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
18 janv. 2008 à 10:03
je vais regarder...
en passant, je n'aime pas ton pilotage via SendKeys, je trouve ca aléatoire

je te conseille plutot de greffer un pipe en entrée (StandardInput) de ton process Command
idem peut etre pour la sortie standard, si tu souhaites récuperer le texte de la commande DOS
0
jl205 Messages postés 13 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 24 mars 2010
19 janv. 2008 à 10:35
Je te remercie du conseil Renfield. Je change ça tout de suite. Le temps de trouver comment on utilise StandardInput
0
Rejoignez-nous