Mit Netzwerkserver verbinden

Anfängerfragen zum Programmieren mit PureBasic.
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Mit Netzwerkserver verbinden

Beitrag von CNESM »

Hallo Leute,

ich hab nen kleines Wissenproblem und ich hoffe ihr könnt mir helfen:

Ich möchte mich gerne mittels PB an einen Netzwerkserver verbinden. Dabei soll der Netzwerkserver nicht als ein Netzlaufwerk mit festen Laufwerksbuchstaben im Arbeitsplatz eingerichtet werden, sondern er soll unter der Netzwerkumgebung auftauchen, damit alle den gleichen Pfad haben (Ansonsten hat der eine den laufwerksbuchstaben Z: und der ander G: usw.) Leider fehlt mir da das theoretische Wissen. Wo finde ich dazu Informationen? Manuell kann man das Ganze über folgenden Weg einrichten: Rechte Maustaste auf Arbeitsplatz -> Netzlaufwerk verbinden -> Onlinespeicherplatz anfordern oder mit einem Netzwerkserver verbinden -> Eine andere Netzwerkressource auswählen -> Adresse eingeben usw.

Vielen Dank für Infos!
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag von CNESM »

Hallo,

ich glaube, ich habs:

http://www.purebasic.fr/german/viewtopi ... highlight=

Kann mir jemand sagen, wie man ein Netzwerklauf auch wieder löscht? Einfach auf rechte Maustaste und löschen oder löscht man damit auch die Daten auf den Server?
Benutzeravatar
gnozal
Beiträge: 219
Registriert: 04.12.2004 13:01
Wohnort: Frankreich (67)
Kontaktdaten:

Beitrag von gnozal »

Maybe I didn't understand it right, but I think you may need something like this :

Code: Alles auswählen

; Author: Rings
; Date: 24. September 2002
; OS: Windows
; Demo: No

;Connect/Disconnect shared networkdirectory as mapped drives
;PureBasic-Port 2002  by Siegfried Rings (CodeGuru)

#NO_ERROR = 0
#CONNECT_UPDATE_PROFILE = $1
; The following includes all the constants defined for NETRESOURCE,
; not just the ones used in this example\
#RESOURCETYPE_DISK = $1
#RESOURCETYPE_PRINT = $2
#RESOURCETYPE_ANY = $0
#RESOURCE_CONNECTED = $1
#RESOURCE_REMBERED = $3
#RESOURCE_GLOBALNET = $2
#RESOURCEDISPLAYTYPE_DOMAIN = $1
#RESOURCEDISPLAYTYPE_GENERIC = $0
#RESOURCEDISPLAYTYPE_SERVER = $2
#RESOURCEDISPLAYTYPE_SHARE = $3
#RESOURCEUSAGE_CONNECTABLE = $1
#RESOURCEUSAGE_CONTAINER = $2
; Error Constants:
#ERROR_ACCESS_DENIED = 5
#ERROR_ALREADY_ASSIGNED = 85
#ERROR_BAD_DEV_TYPE = 66
#ERROR_BAD_DEVICE = 1200
#ERROR_BAD_NET_NAME = 67
#ERROR_BAD_PROFILE = 1206
#ERROR_BAD_PROVIDER = 1204
#ERROR_BUSY = 170
#ERROR_CANCELLED = 1223
#ERROR_CANNOT_OPEN_PROFILE = 1205
#ERROR_DEVICE_ALREADY_REMBERED = 1202
#ERROR_EXTENDED_ERROR = 1208
#ERROR_INVALID_PASSWORD = 86
#ERROR_NO_NET_OR_BAD_PATH = 1203

Procedure ConnectDrive(Drive.s, Resource.s)
  NetR.NETRESOURCE
  ErrInfo.l
  MyPass.s
  MyUser.s
  NetR\dwScope = #RESOURCE_GLOBALNET
  NetR\dwType = #RESOURCETYPE_DISK
  NetR\dwDisplayType = #RESOURCEDISPLAYTYPE_SHARE
  NetR\dwUsage = #RESOURCEUSAGE_CONNECTABLE
  NetR\lpLocalName =@Drive.s; If undefined, Connect with no device
  NetR\lpRemoteName =@Resource.s; Your valid share
  
  ;NetR.lpComment = "Optional Comment"
  ;NetR.lpProvider =    ; Leave this undefined
  ; If the UserName and Password arguments are NULL, the user context
  ; for the process provides the default user name.
  ErrInfo = WNetAddConnection2_(NetR, MyPass, MyUser, #CONNECT_UPDATE_PROFILE)
  If ErrInfo = #NO_ERROR
    MessageRequester("Net Connection Successful!",   "Share Connected",0)
  Else
    MessageRequester("ERROR: " +Str( ErrInfo ), " - Net Connection Failed!" +"Share not Connected",0)
  EndIf
EndProcedure

Procedure DisconnectDrive(Drive.s)
  ErrInfo.l
  strLocalName.s
  strLocalName.s = Drive.s
  ErrInfo = WNetCancelConnection2_(strLocalName, #CONNECT_UPDATE_PROFILE, #False)
  If ErrInfo = #NO_ERROR
    MessageRequester ("Net Disconnection Successful!",   "Share Disconnected",0)
  Else
    MessageRequester( "ERROR: " +Str( ErrInfo )," - Net Disconnection Failed!"+"Share not Disconnected",0)
  EndIf
EndProcedure

ConnectDrive("X:","\\ServerName\ShareName")
DisConnectDrive("X:")
For free libraries and tools, visit my web site (also home of jaPBe V3 and PureFORM).
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag von CNESM »

Hi gnozal,

thanks for your answer but to contect a server as a drive to my workplace is not the right thing I search. I found a good example here:

http://www.purebasic.fr/german/viewtopi ... highlight=

With the modification i had a good and easy way to do what i want to do. Additionally i had the keywords for searching in the WWW. Google is your friend :mrgreen:
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag von CNESM »

Ich muss leider nochmal nachharken.

Wenn ich mit folgenden Code:

http://www.purebasic.fr/german/viewtopi ... highlight=

und meinem Pfad:

"http://meineseite.de/workspaces/privat/" (Pfad für Netzwerkserver, ansteuerbar eigentlich nur Intranet mittels IE)

eine Verknüpfung erstelle, bekomme ich leider nur eine IE-Verknüpfung, die nach dem Öffnen den IE öffnet.

Wenn ich den Pfad etwas anpasse:

"\\meineseite.de\workspaces\privat\"

erstell er mir eine Verknüpfung zum Server. Leider unterscheidet sich die erstellte Verknüpfung von der, die Windows erstellt(Meine="File Folder", Windows="Web Folder", auch die Icon-Symbole unterscheiden sich). Wenn ich nämlich über Windows mir in der Netzwerkumgebung eine Verknüpfung einrichte, verwende ich den Pfad

"http://meineseite.de/workspaces/privat/" und Windows erstellt mir eine korrekte Verknüpfung zum Server.

Hoffe ihr könnt das irgendwie nachvollziehen. Bin etwas ratlos ....
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag von CNESM »

Vielleicht hab ich das dumm ausgedrückt, machen wir es einfacher:

Welche Schreibweise ist für die Netzwerkumgebung richtig?

"http://meineseite.de/workspaces/privat/" (Laut unserer IT Firma)

oder

"\\meineseite.de\workspaces\privat\" (Meiner Meinung nach die richtige Schreibeweise, gleiche Ansicht auch von meinen Chef [Dr. der IT :mrgreen: ])
Little John

Beitrag von Little John »

Vielleicht hilft Dir ein Artikel über die Uniform Naming Convention weiter?

Gruß, Little John
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag von CNESM »

Super, genau sowas habe ich gesucht, danke John!
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag von CNESM »

Hallo Leute,

ich muss das Thema leider nochmal auskramen. Ich hab das Tool nun soweit fertig. Klappt auch alles wie es soll, nur leider habe ich beim Löschen der .lnk immer wieder das Problem, das das nicht richtig ausgeführt wird:

Code: Alles auswählen

SetFileAttributes(MeinPfad.s,#PB_FileSystem_Normal)
Erg=DeleteFile(GetSystemFolder(#CSIDL_NETHOOD)+"\MeineVerknüpfung.lnk")
Die lnk wird NICHT gelöscht, auch bei anderen "unsauberen" Möglichkeiten, wie die DeleteOwnExe-Methoden für Installprogrammen (über RunProgramm z.B.)

Edit: Normale Desktopverknüpfungen werden problemlos gelöscht, also stimmt die Vorgehensweise an sich schon mal. Scheint irgendwie am Netzumgebungsordner zu liegen :? Probleme tauchen auch schon auf beim Setzen der Attribute :(
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag von CNESM »

So, hab mich jetzt nochmal rangesetzt und mich tiefer in die Sache eingelesen. Nach 10 Min hatte ich dann ne Lösung :shock: :mrgreen: Bei mir läuft das problemlos, leider traue ich der Ganze Sache nicht wirklich, auch wenn ich sich mit den www Kommentaren deckt. Hier mal mein Code. Wäre toll, wenn jemand die Funktionfähigkeit des Codes bestätigen könnte.

Was ist das Problem? Scheinbar sind FTP und Server Verbindungen keine reine .lnk Verknüpfungen, da diese nicht mit "C:\.....\MeinOrdner.lnk" angesprochen werden können. Die .lnk-Geschichte greift erst, wenn man in den Ordner gelangt. Daher muss der Aufruf mit "C:\.....\MeinOrdner\" erfolgen. Wichtig ist zudem die Fileeigenschaften auf normal zu setzen, da Ordner in "My Network Places" eine höhere Sicherheitsstufe besitzen (Mir war nichtmal bekannt, das Windows "Sicherheitsstufen" besitzt ;)). Die lassen sich ansonsten NICHT löschen. Zudem ist die Vorgehensweise auch wieder abhängig von der verwendeten Schreibweise, also "http://..." oder "\\....\".

Code: Alles auswählen

Procedure.s GetSystemFolder(folder)
  *itemid.ITEMIDLIST=#Null
  If SHGetSpecialFolderLocation_(0,folder,@*itemid)=#NOERROR
    location$=Space (#MAX_PATH)
      If SHGetPathFromIDList_(*itemid,@location$)
        ProcedureReturn location$
      EndIf
  EndIf
EndProcedure

Lnk.s=GetSystemFolder(#CSIDL_NETHOOD)+"\Ordner\"
SetFileAttributes(Lnk.s,#PB_FileSystem_Normal)
Erg=DeleteFile(Lnk.s)
If Erg=0
  Erg=DeleteDirectory(Lnk.s,"")
EndIf
MessageRequester("Information",Str(Erg),#PB_MessageRequester_Ok)
Antworten