![]() |
RDP Καλημέρα σε όλους. Γνωρίζει κάποιος αν υπάρχει τρόπος να ελέγξουμε αν μία εφαρμογή "τρέχει" από RDP?? Ευχαριστώ προκαταβολικά. Χρήστος. |
Μήπως να δώσεις λίγο περισσότερες λεπτομέρειες...δεν υπάρχει πρόβλημα μια εφαρμογή να τρέξει μέσω RDP..εδώ τρέχουν παιχνίδια |
Αυτό που ζητάω είναι να μπορώ να καταλάβω αν η εφαρμογή μου είναι ανοιχτή απο RDP ή τοπικά για να μπορέσω να εφαρμόσω τις κατάλληλες ρυθμίσεις. |
Δουλεύεις με RemoteApp? Τι ακριβώς χρειάζεσαι? Δώσε μια πρόχειρη περιγραφή της κατάστασης για να δούμε τι χρειάζεσαι. |
Ναι δουλεύω με RDP διότι οι Users είναι στην Κίνα, Νότιο Αφρική και Ρουμανία και οι Server μου είναι στην Φρανκφούρτη. Γι αυτό τον λόγο χρειάζομαι να ξέρω αν ο χρήστης άνοιξε την εφαρμογή με RDP ή την άνοιξε τοπικά στον υπολογιστή του ώστε να εφαρμόσω και τις κατάλληλες ρυθμίσεις στο άνοιγμα της. Ελπίζω να έγινα πιο κατανοητός και σε ευχαριστώ για το ενδιαφέρον να βρείς λύση στο πρόβλημα μου. Βασικά το κυρίως πρόβλημα μου είναι για το όνομα του υπολογιστή (Τοπικού) και την διεύθυνση δικτύου (Τοπικού) αντί για το όνομα και την διευθυνση του τερμιναλ σερβερ. Αν καταφέρω να ξέρω αν ο χρήστης άνοιξε την εφαρμογή τοπικά πχ στην Φρανκφούρτη τότε τρέχω άλλον κώδικα για να μου φέρει τα στοιχεία αυτά (Όνομα και IP) και αν την άνοιξε με RDP τότε τρέχω πάλι άλλον κώδικα για τα ίδια στοιχεία. Δεν μπορώ να σκεφτώ αυτήν την στιγμή άλλον τρόπο. |
Τραβάς το όνομα του Υπολογιστή και καθάρισες ? Αν τρέχει με RDP to Environ("ComputerName") θα σου γυρίσει το όνομα του RDP Server ...π.χ myBiGGermanServer ειδάλλως θα είναι τοπικό. |
Χμμ προτεινεις δηλαδή να παίρνω πρώτα το όνομα του Σερβερ και αν αυτό είναι το σωστό τότε είναι RDP αλλιώς δεν είναι?? Ενδιαφέρον, δεν το είχα σκεφτεί. :) Για κάτσε να κάνω μια δοκιμή. Ευχαριστώ πολύ για την ιδέα. |
Λοιπόν φαίνεται να δουλεύει μια χαρά όμως σκέφτηκα άλλο πρόβλημα. RDP είναι και το CItrix όμως. Και εκεί το όνομα του σέρβερ δεν είναι το ίδιο. Τι κάνω σε αυτήν την περίπτωση? |
Μισό λεπτάκι. Έχεις 2 Servers ? 1 Windows RDP Server & 1 Citrix ? Αν είναι έτσι το Citrix επειδή δεν το έχω δουλέψει 1 Wrapper είναι στο RDP ...οπότε η φιλοσοφία δεν αλλάζει... Αν δεν κάνω λάθος απλώς κάνει Publish τα προγράμματα ώστε να τρέχουν μέσα απο αυτό. Για δώσε λίγο πληροφορία. |
Μπορείς να δουλέψεις και με WMI & API αλλά νομίζω το περιπλέκεις https://www.vbforums.com/showthread....ning-on-Citrix Ουσιαστικά πάλι σε Terminal Server πάμε. |
Έχει και Hardcore API https://stackoverflow.com/questions/...minal-services Το Citrix απο περιέργεια πως το δουλεύεις ? |
Οι βάσεις και τα δεδομένα είναι σε "έναν" Σερβερ στην Φρανκφούρτη. Οι χρήστες δουλεύουν είτε τοπικά (Στουτγκαρδη, Χάλε) είτε με RDP Κίνα, Ρουμανία και Νότιο Αφρική λόγω απόστασης και λόγω ταχύτητας Ιντερνετ. Αναγκαστικά πρέπει να ανοίγουν την εφαρμογή με RDP είτε με το Citrix. Το Citrix είναι επίσης απομακρυσμένη εργασία όμως με VM οπότε παίρνει ονόματα Σερβερ διάφορα όπως τα έχει ορίσει το τμήμα πληροφορικής. (ΙΤ) Το θέμα είναι ότι δεν μπορώ να κοντρολάρω όλα τα ονόματα των VM Server, πρώτον γιατί δεν τα ξέρω όλα και δεύτερον γιατί είναι πολλά. Οπότε νομίζω ότι πρέπει οπωσδήποτε να βρώ έναν τρόπο να ξέρω αν η εφαρμογή είναι ανοιχτή με RDP ή τοπικά :( |
Eυχαριστώ για τα λίνκς θα τα κοιτάξω τώρα. Όταν λές πώς το δουλεύω το Citrix τι ακριβώς εννοείς? |
Οκ νομίζω WTS_PROTOCOL_TYPE_ICA αυτό θα πρέπει να κάνει δουλειά. 1000 Ευχαριστώ για τον χρόνο σου. |
Το είδα λίγο...το Citrix υποθέτω τα Δουλεύεις σαν Virtual Desktops ουσιαστικά MicroVMs hostαρισμένα σε κάποιο Citrix Server...εκτός αν κάνω λάθος. |
Ναι έτσι πρέπει να τα έχουν σεταρισμένα. |
Λοιπόν εγώ θα αφήσω εδώ αυτόν τον κώδικα που επιστρέφει το όνομα και την διεύθυνση του Τοπικού υπολογιστή πίσω απο μία απομακρυσμένη σύνδεση να υπάρχει για τυχών ενδιαφερόμενους. Επίσης να πώ ότι δουλεύει και σε περιβάλλον Citrix (Windows 8 και μετά) Private Const WTS_CURRENT_SERVER_HANDLE = 0& Public Enum WTS_CONNECTSTATE_CLASS WTSActive WTSConnected WTSConnectQuery WTSShadow WTSDisconnected WTSIdle WTSListen WTSReset WTSDown WTSInit End Enum Public Type WTS_CLIENT_ADDRESS ADDRESSFAMILY As Long ADDRESS(20) As Byte End Type Public Type WTS_CLIENT_NAME TNAME As String * 11 End Type Public Type WTS_CLIENT_INFO CINFO As String * 20 End Type Public Enum WTSInfoClass WTSInitialProgram WTSApplicationName WTSWorkingDirectory WTSOEMID WTSSessionId WTSUserName WTSWinStationName WTSDomainName WTSConnectState WTSClientBuilderNumber WTSClientName WTSClientDirectory WTSClientProductId WTSClientHardwareId WTSClientAddress WTSClientDisplay WTSClientProtocolType End Enum Public Type WTS_SESSION_QUERY SessionId As Long pWinStationName As Long senum As WTSInfoClass End Type Private lngPID As Long Private WTS_CURRENT_SESSION As Long Private Declare Function WTSQuerySessionInformation Lib "wtsapi32.dll" Alias "WTSQuerySessionInformationA" (ByVal hServer As Long, ByVal SessionId As Long, ByVal WTS_INFO_CLASS As WTSInfoClass, ByRef QSbuffer As Long, ByRef pCount As Long) As Long Private Declare Function GetCurrentProcessId Lib "Kernel32.dll" () As Long Private Declare Function WFGetActiveProtocol Lib "wfapi.dll" (ByVal SessionId As Long) As Long Private Declare Sub WTSFreeMemory Lib "wtsapi32.dll" (ByVal pMemory As Long) Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) Private Declare Sub ProcessIdToSessionId Lib "Kernel32.dll" (ByVal lngPID As Long, ByRef lngSID As Long) 'Funktion für Auslesen des RDP-Hostnames Public Function GetWTSQueryHost(ByVal SessionId As Long) As String Dim RetVal As Long, lpBuffer As Long, Count As Long Dim p As Long, i As Integer Dim lName As Long, sName As String Dim WTSQueryInfo() As WTS_SESSION_QUERY Dim WTSQueryName As WTS_CLIENT_NAME RetVal = WTSQuerySessionInformation(WTS_CURRENT_SERVER_HAND LE, _ SessionId, WTSClientName, lpBuffer, Count) If RetVal Then ' Prozedur erfolgreich p = lpBuffer CopyMemory WTSQueryName, ByVal p, Len(WTSQueryName) ' Speicher wieder freigeben WTSFreeMemory lpBuffer Else 'Prozedurfehler // Keine RDP, Keine DLL da oder sonstwas faul... MsgBox "Fehler beim Auslesen der RDP-Sitzungsdaten. Es konnten keine Informationen gewonnen werden. ", vbCritical, "DLL-Zugriffsfehler " & Err.LastDllError End If 'Returnwert GetWTSQueryHost = Trim$(WTSQueryName.TNAME) End Function Public Function GetClientIPAddress() As String Dim RetVal As Long Dim TmpAddress As WTS_CLIENT_ADDRESS Dim ByteRet As Long Dim lpBuffer As Long Dim p As Long ' get the id of current process running lngPID = GetCurrentProcessId ' get the session id in which this process is running ProcessIdToSessionId lngPID, WTS_CURRENT_SESSION ' user the current server, session id to trap the other details RetVal = WTSQuerySessionInformation(WTS_CURRENT_SERVER_HAND LE, WTS_CURRENT_SESSION, WTSClientAddress, lpBuffer, ByteRet) If RetVal Then ' WTSQuerySessionInfo was successful. p = lpBuffer CopyMemory TmpAddress, ByVal p, ByteRet ' Free the memory buffer. WTSFreeMemory lpBuffer Else GetClientIPAddress = "" Err.Raise Err.Number, Err.Source, "Error with the wtsQuerySessionInfo command " & Err.LastDllError End If GetClientIPAddress = Trim(TmpAddress.ADDRESS(2) & "." & TmpAddress.ADDRESS(3) & "." & TmpAddress.ADDRESS(4) & "." & TmpAddress.ADDRESS(5)) End Function |
| Η ώρα είναι 11:11. |
Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.