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

Résolu
NeriXs Messages postés 258 Date d'inscription lundi 4 mai 2015 Statut Membre Dernière intervention 27 février 2024 - 25 mai 2015 à 20:16
NeriXs Messages postés 258 Date d'inscription lundi 4 mai 2015 Statut Membre Dernière intervention 27 février 2024 - 27 mai 2015 à 15:02
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

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
25 mai 2015 à 21:07
Executes-tu le setup en tant qu'administrateur ?
0
NeriXs Messages postés 258 Date d'inscription lundi 4 mai 2015 Statut Membre Dernière intervention 27 février 2024 1
25 mai 2015 à 21:43
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é ?
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
25 mai 2015 à 22:02
Pas avec le gestionnaire d'empaquetage de VB6, trop vieux.
Regardes du côté d'InnoSetup.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
25 mai 2015 à 22:17
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.

0
NeriXs Messages postés 258 Date d'inscription lundi 4 mai 2015 Statut Membre Dernière intervention 27 février 2024 1
Modifié par NeriXs le 26/05/2015 à 07:47
Bonjour,

Cela sous-entend que le Setup doit être lancé depuis un compte administrateur.
Votre code fonctionne sous Windows 7 32 et 64 bits.
0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 26/05/2015 à 08:12
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.
0
NeriXs Messages postés 258 Date d'inscription lundi 4 mai 2015 Statut Membre Dernière intervention 27 février 2024 1
26 mai 2015 à 08:20
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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 mai 2015 à 08:43
On peut très bien lancer une commande RunAs depuis un compte User classique avec authentification administrateur

heu ... ce qui revient à être un administrateur...
0
NeriXs Messages postés 258 Date d'inscription lundi 4 mai 2015 Statut Membre Dernière intervention 27 février 2024 1
26 mai 2015 à 13:58
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
0
NeriXs Messages postés 258 Date d'inscription lundi 4 mai 2015 Statut Membre Dernière intervention 27 février 2024 1
26 mai 2015 à 18:04
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?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 26/05/2015 à 19:13
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.
0
NeriXs Messages postés 258 Date d'inscription lundi 4 mai 2015 Statut Membre Dernière intervention 27 février 2024 1
Modifié par NeriXs le 26/05/2015 à 20:12
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 !
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 mai 2015 à 20:27
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 ).
0
NeriXs Messages postés 258 Date d'inscription lundi 4 mai 2015 Statut Membre Dernière intervention 27 février 2024 1
26 mai 2015 à 22:09
Désolé je n'avais même pas relu le contenu du MsgBox.

MsgBox "runas /user:" & txtdom.Text & "\" & txtuser.Text & " " & App.Path & "\Project1.exe"
0
NeriXs Messages postés 258 Date d'inscription lundi 4 mai 2015 Statut Membre Dernière intervention 27 février 2024 1
27 mai 2015 à 15:02
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
0
Rejoignez-nous