Lancer (Shell ou process.start) un application classique (notepad.exe) depuis un [Résolu]

mallett 12 Messages postés lundi 1 septembre 2003Date d'inscription 16 juin 2008 Dernière intervention - 10 juin 2008 à 12:41 - Dernière réponse : cs_Megafan 390 Messages postés dimanche 7 avril 2002Date d'inscription 23 septembre 2016 Dernière intervention
- 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

Thierry
Afficher la suite 

Votre réponse

17 réponses

Meilleure réponse
vaughan 207 Messages postés mardi 6 août 2002Date d'inscription 29 octobre 2008 Dernière intervention - 10 juin 2008 à 14:23
3
Merci
Est-ce que l'api CreateProcessWithLogonW peut faire l'affaire ???

http://msdn.microsoft.com/en-us/library/ms682431(VS.85).aspx
http://www.vbfrance.com/infomsg_RUN-AS-VB6_1061764.aspx

Voici le déclaration VB :
Private Const SW_SHOWNORMAL = 1
Private Const LOGON_WITH_PROFILE = &H1&
Private Const LOGON_NETCREDENTIALS_ONLY = &H2&
Private Const CREATE_DEFAULT_ERROR_MODE = &H4000000
Private Const CREATE_NEW_CONSOLE = &H10&
Private Const CREATE_NEW_PROCESS_GROUP = &H200&
Private Const CREATE_SEPARATE_WOW_VDM = &H800&
Private Const CREATE_SUSPENDED = &H4&
Private Const CREATE_UNICODE_ENVIRONMENT = &H400&
Private Const ABOVE_NORMAL_PRIORITY_CLASS = &H8000&
Private Const BELOW_NORMAL_PRIORITY_CLASS = &H4000&
Private Const HIGH_PRIORITY_CLASS = &H80&
Private Const IDLE_PRIORITY_CLASS = &H40&
Private Const NORMAL_PRIORITY_CLASS = &H20&
Private Const REALTIME_PRIORITY_CLASS = &H100&

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

vaughan

Merci vaughan 3

codes-sources a aidé 82 internautes ce mois-ci

Commenter la réponse de vaughan
Meilleure réponse
cs_Megafan 390 Messages postés dimanche 7 avril 2002Date d'inscription 23 septembre 2016 Dernière intervention - 10 juin 2008 à 14:44
3
Merci
Salut,
Regarde dans la structure StartInfo, il y a possiblité de déclarer le UserName du créateur du process.
@+
Megafan

Merci cs_Megafan 3

codes-sources a aidé 82 internautes ce mois-ci

Commenter la réponse de cs_Megafan
cs_Megafan 390 Messages postés dimanche 7 avril 2002Date d'inscription 23 septembre 2016 Dernière intervention - 10 juin 2008 à 14:57
0
Merci
Salut,
j'oubliais il faut ausi UseShellExecute a false dans le StatyInfo
@+
Megafan
Commenter la réponse de cs_Megafan
cs_Megafan 390 Messages postés dimanche 7 avril 2002Date d'inscription 23 septembre 2016 Dernière intervention - 10 juin 2008 à 15:59
0
Merci
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
Commenter la réponse de cs_Megafan
mallett 12 Messages postés lundi 1 septembre 2003Date d'inscription 16 juin 2008 Dernière intervention - 10 juin 2008 à 16:27
0
Merci
A tu testé depuis un service ?

Car moi ca marche pas, ca fonctionne depuis une autre appli lancer par un utilisateur mais pas depuis un service SYSTEM.
Commenter la réponse de mallett
cs_Megafan 390 Messages postés dimanche 7 avril 2002Date d'inscription 23 septembre 2016 Dernière intervention - 10 juin 2008 à 16:36
0
Merci
SAlut,
Non j'ai pas essayé depuis un service
Faut que j'essaye alors.........
@+
Megafan
Commenter la réponse de cs_Megafan
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 10 juin 2008 à 18:01
0
Merci
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))

Next

PassCrypt.MakeReadOnly()
StartProcess.StartInfo.UseShellExecute =
False
StartProcess.StartInfo.LoadUserProfile =
True
StartProcess.StartInfo.UserName =
"YYY\USER"
StartProcess.StartInfo.Password = PassCrypt
StartProcess.StartInfo.Verb =
""
StartProcess.StartInfo.FileName = SourceDir &
"VigilantCenter.exe"
StartProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal
StartProcess.StartInfo.Arguments =
""
StartProcess.Start()

Catch ex
As Exception

    SendLog(
"StartProcess Exception : " & ex.Message)

EndTry
 

Une ID ? Merci
Commenter la réponse de PCPT
cs_Megafan 390 Messages postés dimanche 7 avril 2002Date d'inscription 23 septembre 2016 Dernière intervention - 10 juin 2008 à 20:29
0
Merci
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
Commenter la réponse de cs_Megafan
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 10 juin 2008 à 20:45
0
Merci
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
Commenter la réponse de PCPT
cs_Megafan 390 Messages postés dimanche 7 avril 2002Date d'inscription 23 septembre 2016 Dernière intervention - 11 juin 2008 à 08:49
0
Merci
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
Commenter la réponse de cs_Megafan
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 11 juin 2008 à 09:17
0
Merci
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

ou alors j'ai vraiment mal lu? ^^
Commenter la réponse de PCPT
cs_Megafan 390 Messages postés dimanche 7 avril 2002Date d'inscription 23 septembre 2016 Dernière intervention - 11 juin 2008 à 09:45
0
Merci
PCPT > Non l'application lancée par le service est une application WinForm (de ce que j'ai compris)


Mais je me trompe peut-etre aussi...


Un service qui démarre une application ça ca marche (j'ai essayé) avec un simple shell


Une application qui démarre une autre application sous un autre compte ça ca marche (j'ai essayé)


Un service qui démarre une appli sous un autre compte (un compte utilisateur) ça ca marche pas (j'ai essayé aussi)


pourqoui????


et mallett qu'est-ce que tu en dis ?
@+
Megafan


 


 
Commenter la réponse de cs_Megafan
mallett 12 Messages postés lundi 1 septembre 2003Date d'inscription 16 juin 2008 Dernière intervention - 11 juin 2008 à 10:34
0
Merci
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...
Commenter la réponse de mallett
mallett 12 Messages postés lundi 1 septembre 2003Date d'inscription 16 juin 2008 Dernière intervention - 11 juin 2008 à 10:35
0
Merci
megafan > J'avous que la je vois pas ! Tu entend quoi par le service lance un launcher, qui lance l'appli ??? c'est quoi un launcher ?
Commenter la réponse de mallett
cs_Megafan 390 Messages postés dimanche 7 avril 2002Date d'inscription 23 septembre 2016 Dernière intervention - 11 juin 2008 à 11:39
0
Merci
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
Commenter la réponse de cs_Megafan
mallett 12 Messages postés lundi 1 septembre 2003Date d'inscription 16 juin 2008 Dernière intervention - 11 juin 2008 à 12:16
0
Merci
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....
Commenter la réponse de mallett
cs_Megafan 390 Messages postés dimanche 7 avril 2002Date d'inscription 23 septembre 2016 Dernière intervention - 11 juin 2008 à 14:18
0
Merci
mallett > tout à fait 'Interagir avec le bureau ' indispensable.
Risque de securité ............ là je sais pas.
@+
Megafan
Commenter la réponse de cs_Megafan

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.