[AIDE] Problème avec outil d'empaquetage et déploiement VB6. [Résolu]

Signaler
Messages postés
115
Date d'inscription
lundi 4 mai 2015
Statut
Membre
Dernière intervention
15 novembre 2019
-
Messages postés
115
Date d'inscription
lundi 4 mai 2015
Statut
Membre
Dernière intervention
15 novembre 2019
-
Bonjour,
J'ai un petit problème après la création d'une installation via l'outil de VB6.
Une fois l'installation terminée mon applie me crée un fichier texte en :
C:\Users\Moi\AppData\Local\VirtualStore\Program Fles (x86)\MonProjet\Mon_Fichier.txt

Après test, il semble que ce fichier texte devrait etre en :
C:\Program Files (x86)\MonProjet\Mon_Fichier.txt


J'essaie de changer cela lors de la création de mon installation mais, il semble que je n'emploie pas la bonne "syntaxe" ou n'agis pas ou il faudrait !!
Pouvez-vous m'aider ?

Ps: Installation sous Windows 7 x64.

13 réponses

Messages postés
14673
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
28 juin 2020
143
Executes-tu le setup en tant qu'administrateur ?
Messages postés
115
Date d'inscription
lundi 4 mai 2015
Statut
Membre
Dernière intervention
15 novembre 2019

Effectivement ça fonctionne en exécutant le Setup en tant qu'administrateur, merci:)
Existe t-il un moyen de le faire automatiquement ou bien de détecter que cela n'a pas été fait et d'en être informé ?
Messages postés
14673
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
28 juin 2020
143
Pas avec le gestionnaire d'empaquetage de VB6, trop vieux.
Regardes du côté d'InnoSetup.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
226
Bonjour,
Il faut le faire à l'aide d'une commande runas. Cette dernière n'aura toutefois aucune chance de succès si elle n'est pas lancée par un administrateur (heureusement !)
Il faut donc avant toute autre tentative, vérifier que celui sui lance ce setup est bien un administrateur (et qu'il est donc autorisé à lancer ensuite un runas).
J'avais l'habitude de procéder à une telle vérification liminaire de la manière suivante, sous XP :

Private Declare Function IsNTAdmin Lib "advpack.dll" (ByVal dwReserved As Long, ByRef lpdwReserved As Long) As Long

Private Sub Command1_Click()
MsgBox est_administrateur()
End Sub
Private Function est_administrateur() As Boolean
est_administrateur = CBool(IsNTAdmin(ByVal 0&, ByVal 0&))
End Function

Commence par vérifier que ce code fonctionne avec d'autres OS.
On verra ensuite le reste.

Messages postés
115
Date d'inscription
lundi 4 mai 2015
Statut
Membre
Dernière intervention
15 novembre 2019

Bonjour,

Cela sous-entend que le Setup doit être lancé depuis un compte administrateur.
Votre code fonctionne sous Windows 7 32 et 64 bits.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
226
Cela sous-entend que le Setup doit être lancé depuis un compte administrateur

Quelque-chose n'était pas clair ?
Il faut le faire à l'aide d'une commande runas. Cette dernière n'aura toutefois aucune chance de succès si elle n'est pas lancée par un administrateur (heureusement !)


Il faut donc avant toute autre tentative, vérifier que celui sui lance ce setup est bien un administrateur (et qu'il est donc autorisé à lancer ensuite un runas).



Il est bien évident que seul un administrateur peut en plus agir (par un runas) en tant qu'administrateur ...
Encore heureux qu'il en soit ainsi, non ? (sinon ce type de sécurité n'aurait plus aucun sens).

Vérifie que fonctionne également sous VIN 8 (32 et 64)

et si oui ===>> un shell pour lancer la commande runas que tgu trouveras là :
http://www.infoprat.net/astuces/windows2k_xp/commandes/runas.php
dans la partie exemples (le tout premier exemple).
Le plus simple, donc ===>> un tout petit programme toto.ex (par ex) qui :
1) vérifie que administrateur ou exit avec message
2) un shell de ce runas
3) exécution du setup.exe
EDIT : tu peux également faire directement, depuis le 2), ce que tu trouveras ici et qui lancera ton setup.exe en tant qu'administrateur (ce qui t'affranchit alors de l'étape 3))
http://www.vbforums.com/showthread.php?534958-Shell-And-RUNAS-commands

Tu peux bien sûr mettre ce toto.exe dans un autorun.inf et mettre tant toto.exe que Setup.exe à la racine du support CD utilisé.




________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Messages postés
115
Date d'inscription
lundi 4 mai 2015
Statut
Membre
Dernière intervention
15 novembre 2019

J'ai bien dit depuis en non pas par !

On peut très bien lancer une commande RunAs depuis un compte User classique avec authentification administrateur bien sûr.

Pas de Windows 8 pour tester, nous attendons Windows 10 pour migrer.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
226
On peut très bien lancer une commande RunAs depuis un compte User classique avec authentification administrateur

heu ... ce qui revient à être un administrateur...
Messages postés
115
Date d'inscription
lundi 4 mai 2015
Statut
Membre
Dernière intervention
15 novembre 2019

J'essaie de le faire du taff sans VB6 dans un simple bloc-notes.

Private Declare Function ShellExecute Lib "shell32" _
Alias "ShellExecuteA" ( _
ByVal hWnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As VbAppWinStyle) As Long


ShellExecute hWnd, "runas /user:" & txtdom.Text & "\" & txtuser.Text, "App.Path & "\Project1.exe", vbNormalFocus
Messages postés
115
Date d'inscription
lundi 4 mai 2015
Statut
Membre
Dernière intervention
15 novembre 2019

Si je fait :

ShellExecute hWnd, "runas", App.Path & "\Project1.exe", "", "", vbNormalFocus


ça fonctionne, mais pas en passant mes textbox en paramètre.

une idée?
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
226
une idée?

Montre ce que contiennent tes textboxes et ce que tu as exactement écrit.

En appelant ton attention sur le fait que ta seconde commande n'est pas la même que la première (différences importantes)

J'observe au passage que la chaîne :
"runas /user:" & txtdom.Text & "\" & txtuser.Text, "App.Path & "\Project1.exe"
contient un nombre impair de guillemets, ce qui est une erreur bien trop rudimentaire et basique pour que je pense que tu l'as écrite ainsi ! (je veux ne pas croire, penser une seule seconde, que tu atteints un stade de déploiement d'une appli et ne sais pas construire une chaîne par concaténation de chaînes fixes et de variables ! Ce serait vraiment trop ... je ne dis pas ...)

EDIT : il te faut comprendre (j'espère que tu le sais, à ce stade, tout de même ...) que Shell attend une commande, que cette commande est une chaîne de caractères, que cette chaîne de caractères est/doit être exactement celle que tu écrirais en ligne de commande de Windows ...
regarde ce qu'est ta chaîne :m
msgbox "runas /user:" & txtdom.Text & "\" & txtuser.Text, "App.Path & "\Project1.exe"

Quelle belle erreur tu obtiendrais, non ?

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Messages postés
115
Date d'inscription
lundi 4 mai 2015
Statut
Membre
Dernière intervention
15 novembre 2019

Effectivement le guillemet devant App.Path n'a pas lieu d'être.
Les quatre autres correspondent à IpParaleters et IpDirectory qui semblent êtres optionnels.
Je ne jouerai plus avec le bloc-notes c'est promis :).

Voila ce que j'ai exactement :

ShellExecute hWnd, "runas /user:" & txtdom.Text & "\" & txtuser.Text, App.Path & "\Project1.exe", "", "", vbNormalFocus


Dans
txtdom.Text
je renseigne le nom de la machine pour le compte admin local

Dans
txtuser.Text
administrateur

En invite de commande ce serrait :


runas /noprofile /user:MonOrdinateur\administrateur cmd


MsgBox "runas /user:" & txtdom.Text & "\" & txtuser.Text, App.Path & "\Project1.exe"


Me dit type incompatible.

J'avoue que je suis un peu perdu la !
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
226
excuse-moi, mais je vais personnellement abandonner ici-même celui qui est capable d'écrire sans sourciller quelque-chose comme :
MsgBox "toto", "tata"
(qui donnerait bien évidemment le même message d'erreur).
Bonne chance (désolé, mais ce sera sans moi pour des raisons que je préfère ne pas indiquer ici ).
Messages postés
115
Date d'inscription
lundi 4 mai 2015
Statut
Membre
Dernière intervention
15 novembre 2019

Désolé je n'avais même pas relu le contenu du MsgBox.

MsgBox "runas /user:" & txtdom.Text & "\" & txtuser.Text & " " & App.Path & "\Project1.exe"
Messages postés
115
Date d'inscription
lundi 4 mai 2015
Statut
Membre
Dernière intervention
15 novembre 2019

ShellExecute ne semble pas approprié pour ce que je souhaite faire "identifiant d'authentification Imposée".Au final "toujours dans mon cas" quel intérêt de refaire quelque chose que Windows gère déjà.

Je me suis contenté d'inviter l'utilisateur à lancer le programme en mode administrateur tel que suggéré par ucfoutu en début de poste:

Private Declare Function IsNTAdmin Lib "advpack.dll" (ByVal dwReserved As Integer, ByRef lpdwReserved As Integer) As Integer



If Not IsNTAdmin(0&, 0&) <> 0 Then ' droits Admins requis
MsgBox "Pour continuer, veuillez lancer le programme en Mode Administrateur."
Unload Me
Exit Sub
End If