Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   RDP (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/5843-rdp.html)

pctechdr 29-03-21 06:49

RDP
 
Καλημέρα σε όλους. Γνωρίζει κάποιος αν υπάρχει τρόπος να ελέγξουμε αν μία εφαρμογή "τρέχει" από RDP??

Ευχαριστώ προκαταβολικά.
Χρήστος.

tsgiannis 29-03-21 07:51

Μήπως να δώσεις λίγο περισσότερες λεπτομέρειες...δεν υπάρχει πρόβλημα μια εφαρμογή να τρέξει μέσω RDP..εδώ τρέχουν παιχνίδια

pctechdr 29-03-21 09:36

Αυτό που ζητάω είναι να μπορώ να καταλάβω αν η εφαρμογή μου είναι ανοιχτή απο RDP ή τοπικά για να μπορέσω να εφαρμόσω τις κατάλληλες ρυθμίσεις.

tsgiannis 29-03-21 10:25

Δουλεύεις με RemoteApp?
Τι ακριβώς χρειάζεσαι? Δώσε μια πρόχειρη περιγραφή της κατάστασης για να δούμε τι χρειάζεσαι.

pctechdr 29-03-21 10:59

Ναι δουλεύω με RDP διότι οι Users είναι στην Κίνα, Νότιο Αφρική και Ρουμανία και οι Server μου είναι στην Φρανκφούρτη. Γι αυτό τον λόγο χρειάζομαι να ξέρω αν ο χρήστης άνοιξε την εφαρμογή με RDP ή την άνοιξε τοπικά στον υπολογιστή του ώστε να εφαρμόσω και τις κατάλληλες ρυθμίσεις στο άνοιγμα της.
Ελπίζω να έγινα πιο κατανοητός και σε ευχαριστώ για το ενδιαφέρον να βρείς λύση στο πρόβλημα μου.

Βασικά το κυρίως πρόβλημα μου είναι για το όνομα του υπολογιστή (Τοπικού) και την διεύθυνση δικτύου (Τοπικού) αντί για το όνομα και την διευθυνση του τερμιναλ σερβερ. Αν καταφέρω να ξέρω αν ο χρήστης άνοιξε την εφαρμογή τοπικά πχ στην Φρανκφούρτη τότε τρέχω άλλον κώδικα για να μου φέρει τα στοιχεία αυτά (Όνομα και IP) και αν την άνοιξε με RDP τότε τρέχω πάλι άλλον κώδικα για τα ίδια στοιχεία.
Δεν μπορώ να σκεφτώ αυτήν την στιγμή άλλον τρόπο.

tsgiannis 29-03-21 11:11

Τραβάς το όνομα του Υπολογιστή και καθάρισες ?
Αν τρέχει με RDP to Environ("ComputerName") θα σου γυρίσει το όνομα του RDP Server ...π.χ myBiGGermanServer
ειδάλλως
θα είναι τοπικό.

pctechdr 29-03-21 11:20

Χμμ προτεινεις δηλαδή να παίρνω πρώτα το όνομα του Σερβερ και αν αυτό είναι το σωστό τότε είναι RDP αλλιώς δεν είναι?? Ενδιαφέρον, δεν το είχα σκεφτεί. :)
Για κάτσε να κάνω μια δοκιμή. Ευχαριστώ πολύ για την ιδέα.

pctechdr 29-03-21 11:46

Λοιπόν φαίνεται να δουλεύει μια χαρά όμως σκέφτηκα άλλο πρόβλημα. RDP είναι και το CItrix όμως. Και εκεί το όνομα του σέρβερ δεν είναι το ίδιο. Τι κάνω σε αυτήν την περίπτωση?

tsgiannis 29-03-21 11:51

Μισό λεπτάκι.
Έχεις 2 Servers ?
1 Windows RDP Server &
1 Citrix ?
Αν είναι έτσι το Citrix επειδή δεν το έχω δουλέψει 1 Wrapper είναι στο RDP ...οπότε η φιλοσοφία δεν αλλάζει...
Αν δεν κάνω λάθος απλώς κάνει Publish τα προγράμματα ώστε να τρέχουν μέσα απο αυτό.
Για δώσε λίγο πληροφορία.

tsgiannis 29-03-21 11:53

Μπορείς να δουλέψεις και με WMI & API αλλά νομίζω το περιπλέκεις
https://www.vbforums.com/showthread....ning-on-Citrix
Ουσιαστικά πάλι σε Terminal Server πάμε.

tsgiannis 29-03-21 11:59

Έχει και Hardcore API
https://stackoverflow.com/questions/...minal-services
Το Citrix απο περιέργεια πως το δουλεύεις ?

pctechdr 29-03-21 12:02

Οι βάσεις και τα δεδομένα είναι σε "έναν" Σερβερ στην Φρανκφούρτη. Οι χρήστες δουλεύουν είτε τοπικά (Στουτγκαρδη, Χάλε) είτε με RDP Κίνα, Ρουμανία και Νότιο Αφρική λόγω απόστασης και λόγω ταχύτητας Ιντερνετ. Αναγκαστικά πρέπει να ανοίγουν την εφαρμογή με RDP είτε με το Citrix. Το Citrix είναι επίσης απομακρυσμένη εργασία όμως με VM οπότε παίρνει ονόματα Σερβερ διάφορα όπως τα έχει ορίσει το τμήμα πληροφορικής. (ΙΤ) Το θέμα είναι ότι δεν μπορώ να κοντρολάρω όλα τα ονόματα των VM Server, πρώτον γιατί δεν τα ξέρω όλα και δεύτερον γιατί είναι πολλά. Οπότε νομίζω ότι πρέπει οπωσδήποτε να βρώ έναν τρόπο να ξέρω αν η εφαρμογή είναι ανοιχτή με RDP ή τοπικά :(

pctechdr 29-03-21 12:04

Eυχαριστώ για τα λίνκς θα τα κοιτάξω τώρα. Όταν λές πώς το δουλεύω το Citrix τι ακριβώς εννοείς?

pctechdr 29-03-21 12:06

Οκ νομίζω WTS_PROTOCOL_TYPE_ICA αυτό θα πρέπει να κάνει δουλειά. 1000 Ευχαριστώ για τον χρόνο σου.

tsgiannis 29-03-21 12:13

Το είδα λίγο...το Citrix υποθέτω τα Δουλεύεις σαν Virtual Desktops ουσιαστικά MicroVMs hostαρισμένα σε κάποιο Citrix Server...εκτός αν κάνω λάθος.

pctechdr 29-03-21 12:33

Ναι έτσι πρέπει να τα έχουν σεταρισμένα.

pctechdr 13-04-21 19:43

Λοιπόν εγώ θα αφήσω εδώ αυτόν τον κώδικα που επιστρέφει το όνομα και την διεύθυνση του Τοπικού υπολογιστή πίσω απο μία απομακρυσμένη σύνδεση να υπάρχει για τυχών ενδιαφερόμενους. Επίσης να πώ ότι δουλεύει και σε περιβάλλον 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.


Search Engine Optimization by vBSEO 3.3.2