Créer un programme en tenant compte des droits utilisateurs

Codes specifiques à Windows
Patix
Messages : 102
Inscription : ven. 19/nov./2004 14:17

Créer un programme en tenant compte des droits utilisateurs

Message par Patix »

Bonjour,

J'espère que je poste au bon endroit pour cette question.

Comment donner des droits d'admin à un prog purebasic ?

Je m'explique. J'ai un prog purebasic qui doit lancer un exe externe mais celui-ci a besoin des droits administrateur. Comment dois je faire pour ne pas rentrer le mdp à chaque fois ?
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

Message par jbernard13 »

à tout hasard serais tu sous vista???
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

dans les option du compilateur tu as une option

"Demander le mode Admin sous Vista" , a cocher
ça devrai peut etre sufire non?
Patix
Messages : 102
Inscription : ven. 19/nov./2004 14:17

Message par Patix »

Bonjour,

sous xp et vista.

les 2 me posent problème en utilisateur limité.

tout se joue dans la compilation du prog ?
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Patix a écrit :Bonjour,

sous xp et vista.

les 2 me posent problème en utilisateur limité.

tout se joue dans la compilation du prog ?
non pas forcement ..

je t'ai parlé d'un parametre se trouvant dns les option de compilation
de ton editeur ....
pour Vista .....


maintenant on aurai peut etre pus mieux t'informer , si tu nous disais quel est le prg que tu modifie , ou quel parametre de windows tu modifie ...

ça aiderai a déterminer pourquoi ça coince ...


c'est évident que le système se défends comme il peux pour éviter que n'importe quel prg modifie n'importe quoi , ç'est la base de la défense
contre un virus ....

mais certains fichiers ne peuvent etre modifiés tant que Windows (ou l'utilisateur) s'en sert....

des fois, il faut attendre que le fichier ne soit plus utilisé (en le fermant par exemple) , pour pouvoir le modifier ...

et pour un fichier systeme :
des fois , il faut préalablement redémarrer , et faire la modif pendant e démarrage , avant que Windows ne Lock le fichier....



voila :)
Patix
Messages : 102
Inscription : ven. 19/nov./2004 14:17

Message par Patix »

Ben en fait l'exe est mysqld.exe.

Donc il est logique que windows sonne une peu. Je veux créer en local un serveur mysql (style easyphp) mais je veux que tout soit gérer par mon prog.

Donc, la question s'est posée. Comment rendre mon prog avec des droits de lancement utilisateur admin que se soit sous xp ou vista.

La solution pourra me servir d'ailleurs pour d'autres applis surement :-o
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

je comprends ta question, je comprends ton problème
mais je n'ai jamais eu a modifier quoi que ce soit sous Xp ou Vista (ni même sur un Windows Server 2000/3) pour que cela fonctionne.

et que ce soit avec les fonctions natives en ODBC ou que ce soit avec la libmysql.dll depuis PureBasic, pas de souci.

En revanche, peut-être essayes-tu de lancer le serveur MySQL (mysqld) en tant que programme. Vaut mieux dans tous les cas le lancer en tant que service Windows. Va dans les services Windows, si tu as tout installé correctement tu verras le service 'MySQL quelque chose' (chez moi c'est wampmysqld parceque j'ai installer WAMP et non EasyPHP), met le en automatique, et éventuellement dans l'onglet Connexion (sous Vista en tout cas) tu mets l'utilisateur 'Administrateur' et le mot de passe qui va bien, ce devrait être OK.
Patix
Messages : 102
Inscription : ven. 19/nov./2004 14:17

Message par Patix »

Bonjour,

le but pour moi c'est de ne pas avoir à installer easyphp ou autres. Je voudrais créer un programme autonome (purbasic) installable ou j'en ai envie de façon à pouvoir gérer une base mysql de façon locale qui s'installe avec le prog.
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

Et donc ? de démarrer mysqld avec RunProgram() par exemple ?
Dans ce cas, il faudrait jouer avec les privilèges.

Un article à ce sujet, utilisant ShellExecute_() à la place de RunProgram :
http://forums.purebasic.com/english/vie ... +privilege

(Pour ce type de besoin, SQLite semble plus adapté malgré tout)
Patix
Messages : 102
Inscription : ven. 19/nov./2004 14:17

Message par Patix »

Bien, je regarde tout cela mais je veux travailler avec mysql, il me parait plus complet pour mes besoins de sécurité.

et cela est aussi un bon exercice 8)
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Re: Créer un programme en tenant compte des droits utilisate

Message par NY152 »

J'ai une fonction faite un peu à l'arrache qui permet de :

- Lancer un programme et d'attendre la fin de son exécution,
- avec les paramètres voulus,
- avec le dossier de travail voulu,
- que le programme soit visible ou non
- de demander ou non l'élévation du programme lancé (même si le programme compilé n'est pas compilé avec les droits admin

Code : Tout sélectionner

Procedure ShellWait(hWnd.i, lpFile.s, lpParameters.s, lpDirectory.s, nShowCmd.i, asAdmin.i)
  Protected lpExecInfo.SHELLEXECUTEINFO
  Protected Verb.s
  lpExecInfo.SHELLEXECUTEINFO
  lpExecInfo\cbSize  = SizeOf(SHELLEXECUTEINFO)
  lpExecInfo\lpFile = @lpFile
  lpExecInfo\fMask=#SEE_MASK_DOENVSUBST | #SEE_MASK_NOCLOSEPROCESS | #SEE_MASK_FLAG_NO_UI 
  lpExecInfo\hwnd = hWnd
  If asAdmin = 1
    lpExecInfo\lpVerb = @"runas"
  Else
    lpExecInfo\lpVerb = @""
  EndIf
  lpExecInfo\lpParameters = @lpParameters
  lpExecInfo\lpDirectory = @lpDirectory
  If nShowCmd = 1
    lpExecInfo\nShow = #SW_SHOW
  Else
    lpExecInfo\nShow = #SW_HIDE
  EndIf
  ShellExecuteEx_(@lpExecInfo)
  If lpExecInfo\hProcess <> #Null
    Select WaitForSingleObject_(lpExecInfo\hProcess, #INFINITE)
      Case #WAIT_OBJECT_0
        Debug "Fin"
      Default
        Debug "Erreur Objet non signalé"
    EndSelect
    CloseHandle_(lpExecInfo\hProcess)
  Else
    Debug "No run"
  EndIf 
EndProcedure
La fonction est loin d'être parfaite et je la poste qu'à des fins didactique.

A ceux qui trouve ce code mer...., je les invite à améliorer ce dernier ou à poster leur propre code, c'est plus constructif qu'une critique stérile :)
.:NY152:.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Créer un programme en tenant compte des droits utilisate

Message par nico »

Il faut penser a traiter les valeurs de retour, dans ton exemple ça donne:

Code : Tout sélectionner

Procedure.l ShellWait(hWnd.i, lpFile.s, lpParameters.s, lpDirectory.s, nShowCmd.l, asAdmin.l)
  Protected lpExecInfo.SHELLEXECUTEINFO
  Protected Verb.s, Ret.l
  
  lpExecInfo.SHELLEXECUTEINFO
  lpExecInfo\cbSize  = SizeOf(SHELLEXECUTEINFO)
  lpExecInfo\lpFile = @lpFile
  lpExecInfo\fMask=#SEE_MASK_DOENVSUBST | #SEE_MASK_NOCLOSEPROCESS | #SEE_MASK_FLAG_NO_UI 
  lpExecInfo\hwnd = hWnd
  If asAdmin = 1
    lpExecInfo\lpVerb = @"runas"
  Else
    lpExecInfo\lpVerb = @"open"
  EndIf
  lpExecInfo\lpParameters = @lpParameters
  lpExecInfo\lpDirectory = @lpDirectory
  If nShowCmd = 1
    lpExecInfo\nShow = #SW_SHOW
  Else
    lpExecInfo\nShow = #SW_HIDE
  EndIf
  ShellExecuteEx_(@lpExecInfo)
  If lpExecInfo\hProcess <> #Null
    Select WaitForSingleObject_(lpExecInfo\hProcess, #INFINITE)
      Case #WAIT_OBJECT_0
        Debug "Fin"
        Ret = 1
      Default
        Debug "La fonction a échouée"
        Ret = 0
    EndSelect
    CloseHandle_(lpExecInfo\hProcess)
    ProcedureReturn 1
  Else
    Debug "Erreur exécutable non trouvé"
    ProcedureReturn -1
  EndIf 
EndProcedure

Valeur = ShellWait(0, "notepad.exe", "", "", 1, 0)
If valeur > 0
  MessageRequester("Info", "Fin du programme lancé!")
ElseIf valeur = 0
  MessageRequester("Erreur", "La fonction a échouée!")
ElseIf valeur = -1
    MessageRequester("Erreur", "Exécutable non trouvé!")
EndIf
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Créer un programme en tenant compte des droits utilisate

Message par nico »

Je m'explique. J'ai un prog purebasic qui doit lancer un exe externe mais celui-ci a besoin des droits administrateur. Comment dois je faire pour ne pas rentrer le mdp à chaque fois ?
J'ai fais une petite recherche, il semble que depuis vista, il ne soit pas possible (a revérifier) de lancer un prog depuis un compte limité même avec le nom du compte et le mot de passe pour des raisons de sécurité.

Cela dit, il doit être possible de le faire en lançant une tâche (je n'ai pas réussi a créer cette tâche avec les comptes admin depuis un compte limité mais ça doit être possible).
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Créer un programme en tenant compte des droits utilisate

Message par nico »

Il y aurait cette méthode, ici:
http://www.howtogeek.com/124087/how-to- ... nistrator/

En premier, afficher le compte administrateur caché de window, donc depuis un compte admin, on lance une console dos cmd.exe en tant qu'administrateur et on tape :
net user administrateur /Active:yes

Allez dans le gestionnaire de compte pour indiquer un mot de passe pour ce compte portant le nom administrateur qui est apparu (nécessaire).

Ensuite, depuis le compte limité, on crée un raccourci, clic droit, nouveau -> raccourci et on entre par exemple pour lancer le Notepad:
C:\Windows\System32\runas.exe /user:NomDel'ordinateur\Administrateur /savecred "C:\Windows\System32\notepad.exe"

Remplacer NomDel'ordinateur par le vrai nom de l'ordinateur.

Faire suivant, et donner un nom de raccourci.

Au premier lancement, il faudra donner le mot de passe du compte administrateur mais celui-ci sera sauvegardé.
Donc pour les lancements suivants, rien à écrire.

A partir d'un prog, il suffira maintenant de lancer le raccourci.
Avatar de l’utilisateur
TazNormand
Messages : 1294
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Créer un programme en tenant compte des droits utilisate

Message par TazNormand »

@Nico, je suppose que tu as eu un besoin perso identique pour répondre à ce topic 2 ans après le dernier message (à savoir celui de NY152)
Image
Image
Répondre