Autor |
Beitrag |
manu
      
Beiträge: 21
|
Verfasst: So 08.06.03 21:17
Ich schreibe bin gerade dabei, ein Tool zu schreiben welches die Netzwerk-Freigaben von Windows verwalten soll.
Dabei bin auf ein Problem gestosen. Windows legt seine Freigaben in der Registry unter "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Network\LanMan\" ab.
Wenn ich nun mit meinen Programm dort eine neue Freigabe erstelle, funktioniert das auch - allerdings nur nach einem Neustart.
Das muss aber auch anders gehen, denn Windows selbst benötigt dazu keinen Neustart.
Also hab ich im Internet nach möglichen Lösungen gesucht. Ich hab dann auch was bei Torry gefunden, nämlich die Komponente TshareIt, aber die liegt leider nur kompiliert für Delphi 6 vor, ich habe aber die Version 7.
Dann hab ich noch was gefunden, und zwar in der MSDN Libary bei den Network Management Functions. Das Ganze findet ihr hier
Zitat: |
NetShareAdd - Shares a resource on a server.
NetShareCheck - Queries whether a server is sharing a device.
NetShareDel - Deletes a share name from a server's list of shared resources.
NetShareEnum - Retrieves share information about each shared resource on a server.
NetShareGetInfo - Retrieves information about a specified shared resource on a server.
NetShareSetInfo - Sets a shared resource's parameters.
|
Die Beispiele, welche dabei sind, sind aber leider in C++. Gibt es eine Möglichkeit die Funktionen unter Delphi zu nutzen? Wenn ja wie, weil ich hab da keine Ahnung, denn ich hab bis jetzt immer brav mit den VCL-Komponenten gearbeitet
mfg manu
|
|
derDoc
      
Beiträge: 623
Win Vista Prof
D2007 Prof
|
Verfasst: Mo 09.06.03 08:56
Was für Systeme sollen denn verwaltet werden?
Bei Windows XP musst du die Registrierung nur neu initialisieren. Alle anderen Windows Versionen benötigen dazu den Neustart.
_________________ MfG derDoc
There are only 10 types of people: those who understand binary and those who don't.
|
|
bis11
      
Beiträge: 1247
Erhaltene Danke: 2
Apple Mac OSX 10.11
|
Verfasst: Mo 09.06.03 12:25
|
|
manu 
      
Beiträge: 21
|
Verfasst: Mo 09.06.03 14:01
@ derDoc: Es sollte erstmal für Win98 funktionieren, aber wenn wir schon dabei sind wie initialisiert man die Registry unter WinXP neu?
@bis11: das hab ich leider nicht gemeint  , denn ich will keine Netzwerk laufwerk verbinden, sondern eine ganz stinknormale Windows-Freigabe erstellen.
Am besten formulier ich mal meine Frage neu: Wie kann ich unter Delphi auf die Funktionen NetShareAdd & NetShareDel zugreifen die in der MSDN hier beschrieben sind?
mfg manu
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 10.06.03 09:53
1. Auf der JEDI-Seite findest du die Übersetzung der Microsoft-C-Header nach Delphi (win32api.zip). Darin befinden sich Units, die die von dir gesuchten Funktionen enthalten.
2. Mit Google lässt sich ein einfaches Beispiel aufstöbern, das du als Grundlage benutzen kannst. Ich würde aber auch in dem Fall die Units der JEDIs holen, dann brauchst du die ganzen Werte aus dem MSDN/PSDK nicht selbst deklarieren.
Gruß.
|
|
manu 
      
Beiträge: 21
|
Verfasst: Di 10.06.03 15:05
Danke nach genau sowas hab ich gesucht! :D
Hab auch ne ne ganze Weile danach gegoogelt, aber war zu blöd was zu finden. :oops: Bei Jedi war ich sogar schon, bin aber ned auf die Idee gekommen das dass bei der WinAPI-Übersetzung dabei sein könnte :D
mfg manu
|
|
manu 
      
Beiträge: 21
|
Verfasst: Mi 11.06.03 13:55
Ich habs jetzt mal mit der Jedi Bibliothek versucht, dabei hab ich folgenden Quelltext produziert:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, JwaLmShare, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var AShareInfo : PSHARE_INFO_2; begin
AShareInfo := New(PSHARE_INFO_2); try with AShareInfo^ do begin shi2_netname := WideString('testshare'); shi2_type := STYPE_DISKTREE; shi2_remark := nil; shi2_permissions := PERM_FILE_READ; shi2_max_uses := DWORD(-1); shi2_current_uses:= 0; shi2_path := WideString('C:\Test'); shi2_passwd := nil; end; NetShareAdd(nil, 2, PBYTE(AShareInfo), nil); finally FreeMem(AShareInfo, SizeOf(PSHARE_INFO_2)); end;
end;
end. |
Leider meldet Delphi nach dem kompilieren unter Win98 einen Error: "Die Datei PROJEKT1.EXE ist verknüpft mit fehlenden Export-NETAPI32DLL:NetShare Add.", danach "...\Projekt1.exe Ein an das Sytem angeschlossenes Gerät funktioniert nicht". Unter WinXP hab ich es auch schnell ausprobiert da hat es ein paar Schutzverletzungen gegeben, aber es hat wenigstens funktioniert. Weiss jemand was ich falsch gemacht hab?
mfg manu
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 12.06.03 16:28
Die Fehlermeldung kommt, weil sich die NetShareXXX-Funktionen unter 9x-Systemen in der "svrapi.dll" befinden. Wenn dein Programm sowohl unter 9x als auch unter NT laufen soll, dann musst du die JEDI-Unit ein bisschen bearbeiten, damit versionsabhängig die korrekte DLL geladen wird.
Laut PSDK muss unter 9x auch SHARE_INFO_50 (s. Microsoft PSDK) benutzt werden, denn die anderen Records werden nur NT-seitig unterstützt. Leider fehlt das SHARE_INFO_50-Record bei den JEDIs.
|
|
manu 
      
Beiträge: 21
|
Verfasst: Do 12.06.03 17:05
Ok, nochmal Danke für deine Hilfe, dass wird dann wohl für einen Delphi-Anfänger wie mich unlösbar bleiben. Vielleicht versuchs ich dann doch lieber nochmal über die Registry, obwohl mir der Neustart nicht so symphatisch ist. :D
mfg manu
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 12.06.03 17:21
Wieso unlösbar? Ich müsste mir die JEDI-Unit zwar erst mal angucken (man hat ja auch nicht alles im Kopf), aber ich würde die beiden DLL-Namen eintragen und im initialization-Teil der Unit die Win-Version prüfen und dann den Dateinamen zuordnen.
Und das Record könnte man anhand des PSDK sicher auch nach Delphi umsetzen. Mal gucken, vielleicht mach´ ich´s am Wochenende. Die Html-Help-Unit habe ich damals ja auch bearbeitet.
Gruß.
|
|
manu 
      
Beiträge: 21
|
Verfasst: Mo 16.06.03 20:03
Und hattest du Zeit?
mfg manu
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 16.06.03 21:13
Zeit schon ... aber -offen gesagt!- nicht allzu viel Lust.
|
|
manu 
      
Beiträge: 21
|
Verfasst: Di 17.06.03 14:32
Ok, aber natürlich trotzdem nochmal vielen Dank!
mfg manu
|
|
einfach112
      
Beiträge: 168
xp
del7
|
Verfasst: Mo 24.05.04 23:23
Titel: also...
also das würde mich nun aber auch mal interessieren wie das genau gehen soll ob mit oder ohne registry !
habe schonmal versucht mit registry zu arbeiten und mal versucht nen ordner frei zu geben ! aber nix !
bei mir kommt überhaupt nix dabei raus ?!
und nochmal ne andere frage wofür steht :
JwaLmShare unter uses !?
mein d7 kennt das net ?!
_________________ sorry bin noob !
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 25.05.04 08:43
Titel: Re: also...
einfach112 hat folgendes geschrieben: | und nochmal ne andere frage wofür steht :
JwaLmShare unter uses !?
mein d7 kennt das net ?! |
Tja, das passiert beim sinnfreien "Copy & Paste" von Quellcode. Du hast wahrscheinlich überlesen, dass hier u.a. von den JEDIs die Rede ist. Das Präfix "Jwa" deutet auf eine JEDI-Unit hin. Bitte ziehe die entsprechenden Beiträge weiter oben zu Rate.
|
|