Netzwerkfreigabe erstellen
-
Hallo,
wie kann ich durch ne C++ Anwendung nen Ordner im Netzwerk freigeben?
freu mich über jede Hilfe.
Gruß, Dirky
-
gar nicht.
das geht unter windows mit winapi. Und das hier ist nicht das Winapi forum, schau mal ~4 foren über dem C++ forum hier, da bist du besser aufgehoben
-
Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
NetShareAdd
-
Okay. NetShareAdd hab ich gefunden, danke. Habs mir angesehen was meine Hilfe dazu geschrieben hat. Aber irgendwie funktioniert nichtmal der Beispielcode der Hilfe.
Wie setze ich die Funktion ein?Wäre toll wenn jemand mal ein kleines Beispiel posten könnt oder einen einen Trick weiß wies geht oder eine seite oder irgendwas
viele Grüße, Dirky
-
Zeige deinen Code.
Simon
-
Dies ist der Beispielcode, den ich verwendet habe.
Beim Compilieren trat zunächst ein Fehler auf, der sagte das beim Aufruf der NatShareAdd Funktion der erste Parameter nicht von TCHAR in irgendwas anderes konvertiert werden kann. Ich hab gelesen, wenn man den eigenen Computer meint soll man 0 eingeben also hab ich das gemacht. --> hat nix gebracht. Dann hab ich rumgespielt und wahlweise den eigenen Computernamen, oder die eigene IP-Adresse für den ersten Parameter eingetragen --> nix hat gewirkt.Ich bekomm immer eine Fehlermeldung und der ganze code bringt so noch nichts.
#define UNICODE #include <windows.h> #include <stdio.h> #include <lm.h> void wmain( int argc, TCHAR *argv[ ]) { NET_API_STATUS res; SHARE_INFO_2 p; DWORD parm_err = 0; if(argc<2) printf("Usage: NetShareAdd server\n"); else { // // Fill in the SHARE_INFO_2 structure. // p.shi2_netname = TEXT("TESTSHARE"); p.shi2_type = STYPE_DISKTREE; // disk drive p.shi2_remark = TEXT("TESTSHARE to test NetShareAdd"); p.shi2_permissions = 0; p.shi2_max_uses = 4; p.shi2_current_uses = 0; p.shi2_path = TEXT("C:\\"); p.shi2_passwd = NULL; // no password // // Call the NetShareAdd function, // specifying level 2. // res=NetShareAdd(argv[1], 2, (LPBYTE) &p, &parm_err); // // If the call succeeds, inform the user. // if(res==0) printf("Share created.\n"); // Otherwise, print an error, // and identify the parameter in error. // else printf("Error: %u\tparmerr=%u\n", res, parm_err); } return; }
Bin dankbar für jede hilfe.
Viele Grüße, Dirky
-
Was soll das heißen "bringt so noch nichts". Der Code ist von MSDN und funzt so, ich habe den selbst mal vor einigen Monaten ausprobiert. Du machst also was falsch oder willst/kannst die Fehlermeldungen nicht vernünftig auswerten.
-
Dirky schrieb:
Ich bekomm immer eine Fehlermeldung und der ganze code bringt so noch nichts.
Wenn Du vielleicht noch die genaue Fehlermeldung erwähnen würdest, dann wäre es um einiges einfacher, Dir zu helfen.
-
Doppelter Eintrag wegen Serverfehler.
-
Also,
Ja, die Fehlermeldungen sind natürlich notwendig zu wissen.
error C2440: '=' unsigned short[10] kann nicht in 'LPSTR' konvertiert werden
error C2440: '=' unsigned short[30] kann nicht in 'LPSTR' konvertiert werden
error C2440: '=' unsigned short[4] kann nicht in 'LPSTR' konvertiert werden
error C2664: 'NetShareAdd': Konvertierung des Parameters 1 von TCHAR* in LPTSTR nicht möglichDiese Fehlermeldungen bekomme ich, wenn ich den MSDN-Code so eingebe, wie ich ihn gepostet habe. Nun habe ich ja natürlich schon versucht diese Fehler zu beheben. Laut Compiler war nach meiner Korrektur der Code auch so, das die Anwendung erfolgreich erstellt werden konnte. --> Nun hab ich ne Anwendung die nix macht, oder wenn dann nur etwas was nix bringt.
Hier mal der Code, der erstellt werden kann, wo dann das Programm aber nix tut:
Hab meine Änderungen mal Fett markiert!
[cpp]#define UNICODE
#include <windows.h>
#include <stdio.h>
#include <lm.h>void wmain( int argc, TCHAR *argv[ ])
{
NET_API_STATUS res;
SHARE_INFO_2 p;
DWORD parm_err = 0;if(argc<2)
printf("Usage: NetShareAdd server\n");
else
{
//
// Fill in the SHARE_INFO_2 structure.
//
p.shi2_netname = ("TESTSHARE");
p.shi2_type = STYPE_DISKTREE; // disk drive
p.shi2_remark = ("TESTSHARE to test NetShareAdd");
p.shi2_permissions = 0;
p.shi2_max_uses = 4;
p.shi2_current_uses = 0;
p.shi2_path = ("C:\");
p.shi2_passwd = NULL; // no password
//
// Call the NetShareAdd function,
// specifying level 2.
//
res=NetShareAdd((LPSTR)argv[1], 2, (LPBYTE) &p, &parm_err);
//
// If the call succeeds, inform the user.
//
if(res==0)
printf("Share created.\n");// Otherwise, print an error,
// and identify the parameter in error.
//
else
printf("Error: %u\tparmerr=%u\n", res, parm_err);
}
return;
}[/cpp]
Okay. Wie schon gesagt, das erstellen klappt. Als Ausgabe auf dem Bildschirm erscheint nun:
Usage: NetShareAdd
Das Programm bricht versucht offnsichtlich garnicht eine Nezwerkfreigabe zu erstellen, weil argc zu klein ist. Wenn ich nun diese obere if und else verschaltung entferne kommt eine Fehlermeldung:
Error 123 parmerr=8Bestimmt hab ich NetShareAdd kaputt gemacht!!!
Viele Grüße, Dirky
-
Fehler 123: The filename, directory name, or volume label syntax is incorrect.
Aus dem Error Lookup Tool...Simon
-
Das Programm erfordert beim Aufruf den Namen des Servers als Parameter, daher solltest Du diesen auch als Parameter übergeben.
Zudem passen wmain als Eintrittspunkt für eine Unicode-Anwendung und die Ansi-Werte in SHARE_INFO_2 nicht zusammen. Du solltest Dich für eins von beiden entscheiden (entweder Unicode oder Ansi).
-
Also ich hab nun alles gemacht:
- Ich hab mich für Ansi entscheiden und wmain in main korrigiert.
- Ich hab den Servernamen meines Computers in NetShareAdd eingetragenDas programm kann ich natürlich nach wie vor erstellen aber es gibt nun nach dem Starten die Fehlermeldung: Error: 1113 parmerr=0 aus.
Gibt es vielleicht eine alternative zu NetShareAdd?
Mir ist der flüchtige Gedanke gekommen, es könnte ein Problem der Zugriffsrechte sein. Ich bin allerdings als Admin angemeldet.
Achja: Und es gibt das Laufwerk C: bei mir tatsächlich. Ich hab danach versucht mal statt dem ganzen Laufwerk nur eine Datei freizugeben - klapt auch nicht.
Nun zu guter letzt habe ich lange mit dem Code rumgespielt und verschiedene Einstellungen verändert und einiges ausprobiert. War aber alles Erfolglos.
Gibt es sonst vielleicht eine MS-Dos funktion, um Datein im Netzwerk freizugeben? Dann könnte ich diese Funktion über einen Aufruf der system-Funktion für mein Programm nutzen.
Viele Grüße
Dirky
-
Visual Studio enthält im Extras-Menü einen Eintrag "Fehlersuche", mit dem man die Ursache für einen Fehler abfragen kann. 1113 heißt "Für das Unicode-Zeichen ist kein zugeordnetes Zeichen in der Mehrbytecodepage vorhanden."
-
Okay...
Ich hab wirklich lang alles ausprobiert, aber nix half. Gibt es denn hier niemanden, der mir erklären kann wie ich einen Ordner im Netzwerk freigeben kann?
Oder wenn mir nur jemand sagen könnt, wie ich NetShareAdd einsetzten muss!?
Beste Grüße,
Dirky
-
Hallo,
Dirky schrieb:
Okay...
Ich hab wirklich lang alles ausprobiert, aber nix half. Gibt es denn hier niemanden, der mir erklären kann wie ich einen Ordner im Netzwerk freigeben kann?
Oder wenn mir nur jemand sagen könnt, wie ich NetShareAdd einsetzten muss!?
Beste Grüße,
DirkyZeige bitte noch einmal den Code, wie er jetzt aussieht.
MfG,
Probe-Nutzer
-
Der Code den ich benutze habe ich bereits gepostet. Seitdem habe ich vieles ausprobiert, aber nichts hatte erfolg. Alles erfolglose wurde wieder in den Ursprungszustand zurückversetzt sodass nun in meinem Projektfolder wieder der msn code liegt.
Kann mir sonst jemand ein anderes Forum empfehlen?
Vielleicht ist dieses Forum einfach nicht geeignet für meine Frage, denn hier wird offensichtlich nur um die Frage herumlamentiert...
Hier nocheinmal mein Problem in aller kürze:
Ich möchte eine Datei im Netzwerk freigeben (mittels C++). Dazu habe ich mir den Code der MSN heruntergeladen und so, unverändert als meinen Quellcode compiliert. Nachdem eine Anwendung erstellt war, war diese allerdings nicht fähig eine Freigabe zu erstellen. Ich bekam eine Fehlermeldung (irgendwas mit usage - die erste if verzweigung hatte einen Fehler ausgelöst). Auch wenn ich diese erste if-verzweigung ausbaue kann ich mit meiner anwendung keine Datei freigeben.
Nun will ich gern glauben, das das Problem nicht an der C++ Funktion, sondern an meinem Computer liegt. Vielleicht wird die Arbeit von NetShareAdd durch eine Einstellung im Rechner verhindert. Dies würde mich wundern, denn ich kann mittels des Windows-explorers Ordner freigeben und Datein im Netzwerk tauschen.
Aber es ist ja trotzdem möglich, das es daran liegt, obwohl mein Rechner standardmäßig Eingestellt ist.
Ich brauche ein Verfahren das auf jedem Rechner, mit dem Betriebssystem Windows Dateien und Ordner im Netzwerk freigaben kann.
Das Verfahren muss universell auf allen Windowsrechnern einsetzbar sein. Wie könnte ich z.B. die Explorer-freigabe-funktion für meine zwecke nutzen?
Aus diesem Grund, bringt es auch nichts Einstellungen an meinem Computer zu ändern, da ich nicht an allen Rechnern diese Einstellungen ändern kann. Und mein Computer ist standardmäßig Eingestellt.Wenn ich eherlich bin, glaube ich nicht, das ich hier eine Antwort auf die Frage bekomme. Darum nocheinmal meine Frage:
Kennt jemand ein Forum wo ich vielleicht hilfe bekommen könnte?
Vielen Dank für eure hilfe
Dirky
-
Du bekommst hier keine Antowrt weil du nicht fähig bist. Die Funktion NetShareAdd ist das, was du suchst und das habe ich dir schon im 1.Beitrag gesagt. Wenn das Beispiel bei dir nicht funktioniert, machst DU offensichtlich was falsch. Wenn du jetzt hier Hellseher erwartest, die prophezeien, was du für Schwachsinn in deinem Programm machst, dann bist du in der Tat im falschen Forum.