mallett
Messages postés12Date d'inscriptionlundi 1 septembre 2003StatutMembreDernière intervention16 juin 2008
-
10 juin 2008 à 12:41
cs_Megafan
Messages postés389Date d'inscriptiondimanche 7 avril 2002StatutMembreDernière intervention23 septembre 2016
-
11 juin 2008 à 14:18
Bonjour a tous,
Je galere grave depuis quelques jours sur un petit besoin specifique !
J'ai une application classique avec Interface (MonAppli.exe)
J'ai un service qui tourne (MonService.exe)
Et si MonService detecte que le process de MonAppli n'est pas lancer, je souhaite qu'il le lance.
Petit soucis (classique) le service est un process SYSTEM, alors que l'appli doit etre lancer sur
le Desktop du CURRENT USER pour pouvoir interagir avec l'utilisateur.
Question : Comment faire pour lancer (shell ou Process.Start) une appli sur l'utiliseur principal actuellement loggé (qui dispose d'un DESKTOP pour avoir les interfaces) et non sur le desktop du SYSTEM (qui tourne lui sans interface) ?
J'ai rien trouver de clair dans ce sens, pourriez-vous m'aider ? Merci d'avance
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
cs_Megafan
Messages postés389Date d'inscriptiondimanche 7 avril 2002StatutMembreDernière intervention23 septembre 20162 10 juin 2008 à 15:59
Salut,
Je viens d'essayer sur ma machine avec un startinfo, cela fonctionne tres bien....
Par contre il y a un truc qui passe pas c'est le DOMAINE\UserName
Utilise l'enregistrement DNS username@mondomaine.truc
@+
Megafan
Vous n’avez pas trouvé la réponse que vous recherchez ?
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 10 juin 2008 à 18:01
ré-édition du message de Mallett
(désolé on ne peut pas modifier directement)
Re : Lancer (Shell ou process.start) un application classique (notepad.exe) depuis un service (monservice.exe)
le 10/06/2008 15:02:09
<hr size ="2" width="100%" />Merci ..
J'ai bien tanté le startinfo.username mais je me trouve avec un "acces refusé".
Et
pour l'API CreateProcessWithLogonW, il faut imperativement fournir le
password. L'idéal serait de pouvoir faire depuis le service un :
runas.exe /user:Domaine\User /savecred APLI.exe
Mais
ca fait rien du tout (ni message d'erreur d'ailleur) j'ai l'impression
qu'il lance le RUNAS comme il faut mais qu'il ne lance pas l'appli.
Question
subsidière.. Si je devais utiliser username et password du startinfo.
Auriez vous un exemple de code pour gérer le password dans un startinfo.
Mon exemple (celui qui me donne un "Accès refusé") :
Try
Dim SourceDir
AsString =
My.Application.Info.DirectoryPath &
""
Dim StartProcess
AsNew Process
Dim PassCrypt
AsNew SecureString
Dim PassClear
AsString =
"XXX"
For i
AsInteger = 1
To PassClear.Length
PassCrypt.AppendChar(Mid(PassClear, i, 1))
cs_Megafan
Messages postés389Date d'inscriptiondimanche 7 avril 2002StatutMembreDernière intervention23 septembre 20162 10 juin 2008 à 20:29
Salut
J'avais vu que tu avais laissé quelques elements confidentiels....
(pas grave, personne ne le sais....) ;)
Pour continuer, effectivement j'ai le meme message d'erreur que toi meme en spéciifant que le service est autorisé à interagir avec le bureau.
Un simple shell par contre fonctionne....par contre le .exe est lancé par l'utilsateur SYSTEM.
Je sêche un peu aussi....
@+
Megafan
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 10 juin 2008 à 20:45
je n'avais pas lu la question....
dans un contexte "normal" (c'est à dire sans bidouille), une application avec interface NE peut PAS être lancée en tant que service, tout simplement
quant aux bidouilles je ne les connais pas, si BruNews passe par là il pourra sans doute te donner plus d'infos.
au pire regarde sur le forum, il avait lancé quelques pistes de réponse il y a moins de 3 mois
++
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
cs_Megafan
Messages postés389Date d'inscriptiondimanche 7 avril 2002StatutMembreDernière intervention23 septembre 20162 11 juin 2008 à 08:49
PCPT > il ne s'agit pas d'une application avec interface lancée en tant que service, mais d'un service qui lance une application avec interface.
mallett> Y a une solution Bourrrin. Ton service lance un 'Launcher' (donc process systeme) , puis le launcher lance ton Appli sous le user que tu veux.
Qu'en pense tu ?
@+ Megafan
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 11 juin 2008 à 09:17
Megafan ->
il ne s'agit pas d'une application avec interface lancée en tant que
service, mais d'un service qui lance une application avec interface, oui mais lancée en tant que service, non?
çà ne rajoute qu'un maillon mais çà reste le même, seul le launcher change mais au même moment dans les mêmes conditions
mallett
Messages postés12Date d'inscriptionlundi 1 septembre 2003StatutMembreDernière intervention16 juin 2008 11 juin 2008 à 10:34
Pour eclaircir le sujet :
J'ai une appli classique qui tourne le compte "current user" lancé en clé run. J'ai un service qui tourne sur le compte "system" qui fait d'autres truc...
Je souhaiterai que mon service surveille le process de l'appli classique, et si ce dernier n'existe pas "arret de l'utilisateur", "plantage", etc... il le relance.
Ca fonctionne mais il le relance avec le compte system (donc plus d'interface, et plus d'intéret pour cet application)
Le but est donc bien pour un service system de lancer une appli classique sur le desktop du current user (avec ou sans avoir a indiquer le password du user !!!) A ce stade d'arrachage de cheuveux, meme avec indication du password je prend !!!!
Voila, j'espere que ce coup si je suis plus clair...
cs_Megafan
Messages postés389Date d'inscriptiondimanche 7 avril 2002StatutMembreDernière intervention23 septembre 20162 11 juin 2008 à 11:39
Mallett > Un service SYSTEM peut lancer une application juste avec un shell
J'ai crée un service et dans le code j'ai fait un shel("calc.exe")
Au démarrage du service , la calculatrice est apparue à l'ecran
Dans les processus la calculatrice est bien lancée par le compte SYSTEM
ça devrait suffir non ?
@+
Megafan
mallett
Messages postés12Date d'inscriptionlundi 1 septembre 2003StatutMembreDernière intervention16 juin 2008 11 juin 2008 à 12:16
oupssss,
Bin moi g bien le calc.exe (SYSTEM) dans les process windows, mais j'ai pas la calculatrice à l'ecran. Ah! Tu a peut etre mis l'option "interagir avec le bureau"...
Alors du coup j'ai une auteur question (casse cou.... le mec hein ?! ) Quelqu'un peut-il me dire quel sont les risques sécu d'utiliser cette option. Car on peut lire partout attention bla, bla, bla.... Mais jamais rien de concré sur les risque est les erreur de dev a éviter ! Merci d'avance
PS : megafan, merci bcp pour ton aide sur ce sujet....