Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Pages: 1
Bonjour,
J'ai une appli qui permet d'écrire dans un fichier texte la liste des sous répertoire d'un répertoire.
Ce répertoire peut un répertoire sur le disque dur (C:\rep) ou sur un lecteur réseau (X:\rep où X:\ est en fait \\Ordi_2\Partage)
Lorsque je lance mon exe en double-cliquant dessus alors pas de soucis : les sous répertoires sont récupérés que mon répertoire soit un disque dur ou un lecteur réseau
Par contre si je lance mon exe via un service Windows (donc avec l'utilisateur Système) alors :
- j'arrive bien a récupérer la liste si le répertoire à scanner est sur le C
- Si le répertoire à scanner est sur un lecteur réseau alors je ne récupères rien.
Le lecteur réseau est accessible à tout le monde en lecture et écriture.
J'ai fais le test avec
- Dirlist d'une listbox : cela me retourne false
- FindFirstFileA : le handle retourné vaut -1
Avez-vous une piste pour que je puisse récupérer cette liste lorsque l'utilisateur qui lance l'exe est "Système" ?
Merci d'avance
Dernière modification par Amélie (23-10-2015 09:40:44)
Hors ligne
Bonjour,
question bête : l'utilisateur Système a-t-il accès à ces mappings réseau ?
Hors ligne
Bonjour,
Bonne question de Rincevent.
J'allais demander ça ne fonctionne pas en utilisant X:\rep et/ou \\Ordi_2\Partage\rep ?
Hors ligne
Bonjour,
Il me semble qu'un lecteur réseau n'est pas accessible par un service Windows et qu'il faut utiliser le nom de partage direct comme "\\Ordi_2\Partage\rep "
Hors ligne
Bonjour,
Par expérience, un service n'a pas accès aux lecteurs réseaux, par contre les chemins UNC fonctionnent ( \\hostname\sharedDir )
Hors ligne
xlat a écrit:
Bonjour,
Par expérience, un service n'a pas accès aux lecteurs réseaux, par contre les chemins UNC fonctionnent ( \\hostname\sharedDir )
Je t'ai devancé de deux minutes ;)
Hors ligne
Ben53 a écrit:
xlat a écrit:
Bonjour,
Par expérience, un service n'a pas accès aux lecteurs réseaux, par contre les chemins UNC fonctionnent ( \\hostname\sharedDir )Je t'ai devancé de deux minutes ;)
Sinon en utilisant l'API windows il est possible de traduire un chemin X:\somewhere vers \\host\sharedDir\somewhere, mais en dehors du service windows (en général dans l'interface de configuration du service) :
function ulong WNetGetConnectionW(string lpLocalName, ref string lpRemoteName, ref ulong lpnLength) library "mpr.dll" alias for "WNetGetConnectionW" function string expandnetworkdrive (readonly string as_path); string ls_remote, ls_drive ulong lul_length, lul_ret ls_drive = left(as_path,2) if match(ls_drive, '^.:$') then ls_remote = Fill( " " , 4096 ) lul_length = len(ls_remote) lul_ret = wnetgetconnection( ls_drive, ref ls_remote, ref lul_length) if lul_ret = 0 then ls_remote += mid( as_path, 3 ) else ls_remote = as_path end if else ls_remote = as_path end if return ls_remote end function
Hors ligne
Merci à tous pour vos réponses.
En effet si au lieu de mettre X:\somewhere, je met \\host\sharedDir\somewhere alors cela fonctionne.
Le soucis c'est que je n'ai que le X:\somewhere et que je n'arrive pas à le transformer en \\host\sharedDir\somewhere.
J'ai mis le code de xlat au tout début dans mon exe et :
- si je lance l'exe via le service Windows alors il me retourne l'erreur 2250 (ERROR_NOT_CONNECTED : This network connection does not exist)
- si je lance l'exe en double-cliquant dessus alors il me retourne bien \\host\sharedDir\somewhere
Avez-vous d'autres idées ?
Merci
Hors ligne
À mon avis, le problème vient à la base du fait que le montage d'un lecteur réseau (X: dans ton cas) est lié à l'utilisateur qui fait le montage.
L'utilisateur "System" ne connaît sans doute pas ton X:... (D'ailleurs, il vaut mieux ne pas utiliser "System" mais plutôt "LocalService" ou "NetworkService" qui sont là pour ça et ont des droits plus adaptés.)
Essaie de paramétrer ton service pour qu'il s'exécute avec ton nom de compte utilisateur. À défaut d'être la solution ça permettra peut-être d'y voir plus clair.
Hors ligne
Amélie a écrit:
Merci à tous pour vos réponses.
J'ai mis le code de xlat au tout début dans mon exe et :
- si je lance l'exe via le service Windows alors il me retourne l'erreur 2250 (ERROR_NOT_CONNECTED : This network connection does not exist)
- si je lance l'exe en double-cliquant dessus alors il me retourne bien \\host\sharedDir\somewhere
Bah oui, c'est pour çà que je précise
xlat a écrit:
... mais en dehors du service windows (en général dans l'interface de configuration du service)
avant mon code
Hors ligne
FMolinas a écrit:
Essaie de paramétrer ton service pour qu'il s'exécute avec ton nom de compte utilisateur. À défaut d'être la solution ça permettra peut-être d'y voir plus clair.
J'ai essayé de modifier le compte utilisé par mon service Windows en mettant mon compte utilisateur.
Il se lance bien avec mon compte car dans le gestionnaire des tâches, je vois bien l'exe PB qu'il lance parmi mes processus mais j'ai toujours le même soucis
xlat a écrit:
... mais en dehors du service windows (en général dans l'interface de configuration du service)
Du coup je ne vois pas où je vais pouvoir faire ce code.
Car j'installe mon service et mon exe via un setup qui me note dans un .ini les chemins d'installation (mais pas en UNC)
Mon service est appelé par requête WebHttp. Il fait quelque vérif et lance mon exe. Et mon exe récupère les infos dont il a besoin dans le ficher ini.
Hors ligne
Pages: 1