UNC-Name ermitteln [Erledigt]

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
Gerd König
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 193
Registriert: Fr, 09. Jun 2006 7:52
Wohnort: Nähe Sömmerda

UNC-Name ermitteln [Erledigt]

Beitrag von Gerd König »

Hallo XBaseler,

nach langer Abstinenz vom Forum habe ich mal wieder ein Problem:

Meine Applikation benötigt ein festes Mapping zu einem Server.
Beim Start möchte ich feststellen, ob das Mapping korrekt ist, z.B. Laufwerk X: mit Server \\Testserver\pfad
Wenn X: mit einem anderen Server gemountet ist will ich das Programm mit einer Fehlermeldung beenden. Der entsprechende Code muß in die AppSys integriert werden.

Könnt Ihr mir helfen?
Im voraus herzlichen Dank, Gerd
Zuletzt geändert von Gerd König am Mo, 03. Sep 2012 10:05, insgesamt 1-mal geändert.
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: UNC-Name ermitteln

Beitrag von Wolfgang Ciriack »

Hallo,
evtl. mit
net use X: >tmp.dat
dann tmd.dat öffnen und Remotename auslesen. Ob es auch eleganter geht ?
Viele Grüße
Wolfgang
Gerd König
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 193
Registriert: Fr, 09. Jun 2006 7:52
Wohnort: Nähe Sömmerda

Re: UNC-Name ermitteln

Beitrag von Gerd König »

Hallo Wolfgang,
daran habe ich auch schon gedacht, aber lieber wäre mir eine Windows-API-Funktion

Gruß Gerd
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: UNC-Name ermitteln

Beitrag von brandelh »

Hi,

Phil hatte einen RUN Ersatz, der die temporäre Datei unnötig machte (vielleicht bei Pablo suchen), ansonsten müsste dieser Befehl das sein was du suchst:

Code: Alles auswählen

DWORD WNetGetUniversalName(
  _In_     LPCTSTR lpLocalPath,
  _In_     DWORD dwInfoLevel,
  _Out_    LPVOID lpBuffer,
  _Inout_  LPDWORD lpBufferSize
);
nicht ganz einfach, aber machbar, eventuell hat Pablo auch dazu ein Beispiel ;-)

:arrow: http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: UNC-Name ermitteln

Beitrag von AUGE_OHR »

Gerd König hat geschrieben:Meine Applikation benötigt ein festes Mapping zu einem Server.
Beim Start möchte ich feststellen, ob das Mapping korrekt ist, z.B. Laufwerk X: mit Server \\Testserver\pfad
Wenn X: mit einem anderen Server gemountet ist will ich das Programm mit einer Fehlermeldung beenden. Der entsprechende Code muß in die AppSys integriert werden.
Thomas Braun
6. Mai 2004
public.xbase++.generic
[HOWTO]: get the UNC name of a drive

Code: Alles auswählen

DLLFUNCTION WNetGetUniversalNameA( @cPfad, nInfoLevel, @cInfo, @nInfoLen ) USING OSAPI FROM mpr.dll

FUNCTION GetUncName( cPath )
LOCAL cInfo    := SPACE(1000)
LOCAL nInfoLen := 1000

   WNetGetUniversalNameA( @cPath, 1 , @cInfo, @nInfoLen )
   cInfo := TRIM(SUBSTR(cInfo,5))
   IF EMPTY(cInfo)  // No UNC path (e.g. C:\)
      cInfo := cPath
   ENDIF

RETURN cInfo
Note : funktioniert nicht unter Windows98

dies ist nun die "einfache" Version. es gibt dazu aber noch einen Kommentar dazu von

Günter Beyes
10. Mai 2004
public.xbase++.generic
Re: [HOWTO]: get the UNC name of a drive
Your assumption may be correct, but since the DllCall invoking
WNetGetUniversalNameA has returned, the memory block containing a copy
of cInfo's content may not be locked any longer, with all dire
implications.
als Attachment hat Günter "seine" Version hinzugefügt.
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: UNC-Name ermitteln

Beitrag von brandelh »

Der Zugriff ist schon recht "rustikal" (einfach 1000 Byte Blanks statt der Strukturen) ;-)
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: UNC-Name ermitteln

Beitrag von brandelh »

Ich habe mal nachgesehen, die verwendete Struktur hat aktuell nur eine Variable:

Code: Alles auswählen

// PowerBasic Code
%UNIVERSAL_NAME_INFO_LEVEL = &H00000001  // die wird oben verwendet
%REMOTE_NAME_INFO_LEVEL    = &H00000002

TYPE UNIVERSAL_NAME_INFOA
    lpUniversalName AS ASCIIZ PTR
END TYPE
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: UNC-Name ermitteln

Beitrag von brandelh »

AUGE_OHR hat geschrieben:als Attachment hat Günter "seine" Version hinzugefügt.
die wollte ich mir auch mal ansehen, aber ich komme aktuell nicht auf den NEWS Server von Alaska ...
Gruß
Hubert
Gerd König
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 193
Registriert: Fr, 09. Jun 2006 7:52
Wohnort: Nähe Sömmerda

Re: UNC-Name ermitteln

Beitrag von Gerd König »

@ Hubert und Jimmy

Vielen Dank Ihr beiden.
Das war genau das, was ich gesucht habe
Herzlichst, Gerd =D>
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: UNC-Name ermitteln [Erledigt]

Beitrag von Wolfgang Ciriack »

Solltet ihr vielleicht in der Wissensbasis nochmal veröffentlichen.
Viele Grüße
Wolfgang
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: UNC-Name ermitteln [Erledigt]

Beitrag von AUGE_OHR »

Wolfgang Ciriack hat geschrieben:Solltet ihr vielleicht in der Wissensbasis nochmal veröffentlichen.
aber wenn bitte die Version von Günter Beyes !!!
wie ich ja zitiert habe wird der "memory block" ( Speicher ) in der "kurz" Version nicht wieder frei gegeben.
bei API Aufrufen "wirkt" der Xbase++ CG nicht, man muss schon selbst "aufräumen".

da man diese API Function jedoch wohl nur 1x beim starten der Application benötigt werden die Auswirkungen weniger Einfluss nehmen als wenn man die Function 1000x benutzt. Am Ende des Tages sollte man aber dann den PC runterfahren ( nicht StandBy ) damit er am nächsten morgen dann mit "frischen" Speicher den Tag übersteht.
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: UNC-Name ermitteln [Erledigt]

Beitrag von brandelh »

AUGE_OHR hat geschrieben:
Wolfgang Ciriack hat geschrieben:da man diese API Function jedoch wohl nur 1x beim starten der Application benötigt werden die Auswirkungen weniger Einfluss nehmen als wenn man die Function 1000x benutzt. Am Ende des Tages sollte man aber dann den PC runterfahren ( nicht StandBy ) damit er am nächsten morgen dann mit "frischen" Speicher den Tag übersteht.
soweit ich das weiß, wird nach dem Ende des Programmes der Speicher der aus dem Programm heraus angefordert wurde wieder gelöscht.
Ich such mal nach der von Günter ;-)
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: UNC-Name ermitteln [Erledigt]

Beitrag von brandelh »

Hi,

tatsächlich "frißt" die einfache Funktion Speicher, wenig aber immerhin, die von Günther nicht.
Hier mal die Testprogramme ...
Dateianhänge
test.zip
(1.99 KiB) 295-mal heruntergeladen
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: UNC-Name ermitteln [Erledigt]

Beitrag von AUGE_OHR »

brandelh hat geschrieben:tatsächlich "frißt" die einfache Funktion Speicher, wenig aber immerhin, die von Günther nicht.
sag ich doch ...
nun sind 1000bit zwar nicht viel aber wenn man mehrere davon hat defragmentiert es den "grösst möglichen zusammenhängenden Speicherblock". es kann also sein das er 16GB so "durchlöchert" das man noch nicht mal 500MB "laden" kann weil nicht "zusammenhängend".
gruss by OHR
Jimmy
Antworten