Citrix ICA application publié + droits sur process

Signaler
Messages postés
956
Date d'inscription
lundi 30 mai 2005
Statut
Membre
Dernière intervention
21 août 2014
-
cs_viviane44
Messages postés
38
Date d'inscription
jeudi 27 septembre 2007
Statut
Membre
Dernière intervention
25 mars 2014
-
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

Messages postés
38
Date d'inscription
jeudi 27 septembre 2007
Statut
Membre
Dernière intervention
25 mars 2014

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.
Messages postés
956
Date d'inscription
lundi 30 mai 2005
Statut
Membre
Dernière intervention
21 août 2014
1
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 --
Messages postés
38
Date d'inscription
jeudi 27 septembre 2007
Statut
Membre
Dernière intervention
25 mars 2014

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
Messages postés
956
Date d'inscription
lundi 30 mai 2005
Statut
Membre
Dernière intervention
21 août 2014
1
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 --
Messages postés
956
Date d'inscription
lundi 30 mai 2005
Statut
Membre
Dernière intervention
21 août 2014
1
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 --
Messages postés
38
Date d'inscription
jeudi 27 septembre 2007
Statut
Membre
Dernière intervention
25 mars 2014

Un grand merci pour ton aide, je vais essayer de suite.