Citrix ICA application publié + droits sur process

cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 - 20 sept. 2005 à 16:59
cs_viviane44 Messages postés 38 Date d'inscription jeudi 27 septembre 2007 Statut Membre Dernière intervention 25 mars 2014 - 23 juin 2009 à 11:42
Bonjour à tous,

Deux gros problèmes :
- Le premier : en lançant mon programme (un programme VB.NET) via citrix en spécifiant un chemin d'application, ce qui se passe et qui est normal c'est que l'explorer n'est pas lancer pour n'avoir que l'application et pas le bureau. Problème, lorsque je lance l'explorer via l'application pour avoir l'explorateur windows le bureau réapparait. Je souhaiterai pouvoir utiliser l'explorer sans le bureau. Quelqu'un a une idée ?
- Deuxième problème : Il y a un bug dans les composant office de VB.NET, et mon application VB.NET fait appel à Excel puis le ferme à la fin de l'exécution-> problème une fois sur 3 Excel reste en process fantom... et lister les process pour les kill via une application VB.NET nécessite tous les droits d'aministrateur. Quelqu'un sait-il comment forcer le kill sans les droits d'administration (et sans faire un RunAs comme le source que j'ai mis sur le site..) ?

6 réponses

cs_viviane44 Messages postés 38 Date d'inscription jeudi 27 septembre 2007 Statut Membre Dernière intervention 25 mars 2014
22 juin 2009 à 15:02
Avez-vous trouver la solution concernant vos process ?
J'ai le même problème lorsque je fais appel à Word ou Excel
Pas de problème en local pour le kill mais impossible d'acèder à la liste des process sous Citrix.
0
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
22 juin 2009 à 16:25
oui, désormais ça fait longtemps mais je crois que m'en souviens à peu près
fait voir ton code et je vais essayer de te corriger

-- Y a autant de bugs dans un programme que de malles-façons dans une maison. Tout dépend de la taille --
0
cs_viviane44 Messages postés 38 Date d'inscription jeudi 27 septembre 2007 Statut Membre Dernière intervention 25 mars 2014
23 juin 2009 à 09:29
Merci pour ta rapide reponse
En fait, mon problème concerne Xord et Excel qui bien que fermés restent en memoire comme processus
vois le code

<hr />If

Wxls
Is
Nothing
ThenWxls = CreateObject("Excel.Application")

ElseWxls.Workbooks.Close()

Wxls.Quit()
Wxls NothingWxls CreateObject("Excel.Application")

End
If
2eme methode

myProcesses = Process.GetProcesses()

For
Each myProcess
In myProcesses

If myProcess.ProcessName = "EXCEL"
ThenWexist = "O"

Wxls = GetObject(, "Excel.Application")

Exit
For

End
If

Nextmais cette methode plante sous CITRIX et c'est là que je voudrais savoir si tu as resolu ton problème.
tuer les process Word et Excel avant de les ré-ouvrir ou les ouvrir s'ils sont déjà actifs.
Merci pour ton aide.

Viviane
0
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
23 juin 2009 à 09:58
en fait tu oublies de supprimer ta référence à excel :
ça c'est bien : Wxls.Workbooks.Close()

Wxls.Quit()

Wxls =Nothing

mais il faut le mettre dès que tu n'utilises plus excel

Autre façon de faire :
<DllImport("user32.dll", SetLastError:=True)> _
        Private Function GetWindowThreadProcessId(ByVal hWnd As Integer, _
            ByRef lpdwProcessId As Integer) As Integer
        End Function

Public Function fnRecupProcessId(ByVal hWnd As Integer) As Integer
                Dim R As Integer
                Dim RetVal As Integer = GetWindowThreadProcessId(hWnd, R)
                return R
        End Function

Public Function fnAjoutPossible(ByVal C As Integer(), ByVal S As Integer) As Boolean
            Dim B As Boolean = True
                Dim i As Integer, L As Integer = C.Length - 1
                For i = 0 To L 'Count
                    If C(i) = S Then
                        B = False
                        Exit For
                    End If
                Next
            Return B
        End Function

Sub New()
                ExcelPID = New Integer() {}
                ExcelHWnd = New Integer() {}
        End Sub

'Sur l'ouverture ou l'obtention de l'objet excel ajoute le code suivant

Dim Id As Integer = fnRecupProcessId(H)
If fnAjoutPossible(ExcelPID, Id) Then
                    Array.Resize(Of Integer)(ExcelPID, ExcelPID.Length + 1)
                    ExcelPID(ExcelPID.Length - 1) = Id
                End If

'Sur la fermeture tu peux faire comme ça
If Not ExcelApplication Is Nothing Then
                    ExcelApplication.ActiveWindow.Close()
                    ExcelApplication.Quit()
                End If
Dim N as integer=ExcelPID.Length
For i as integer = 0 To N
                    Dim localById As Process = Process.GetProcessById(ExcelPID(i))
                    localById.Kill()
                    localById.Dispose()
                Next

-- Y a autant de bugs dans un programme que de malles-façons dans une maison. Tout dépend de la taille --
0

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

Posez votre question
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
23 juin 2009 à 10:02
le principe de mon dernier post c'est que ton environment autorise uniquement un accès restrinct aux process, donc tu accède uniquement à ceux que tu crées dans ta session utilisateur

ducoup, on récupérant le handle de ton process excel grace à Dim H As Integer = ExcelApplication.Hwnd
tu peux récupérer l'Id de process grace grace à GetWindowThreadProcessId

-- Y a autant de bugs dans un programme que de malles-façons dans une maison. Tout dépend de la taille --
0
cs_viviane44 Messages postés 38 Date d'inscription jeudi 27 septembre 2007 Statut Membre Dernière intervention 25 mars 2014
23 juin 2009 à 11:42
Un grand merci pour ton aide, je vais essayer de suite.
0
Rejoignez-nous