Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi [gelöst] Code 67 beim Verbinden eines Netzlaufwerkes (https://www.delphipraxis.net/61150-%5Bgeloest%5D-code-67-beim-verbinden-eines-netzlaufwerkes.html)

Klaus01 17. Jan 2006 15:50


[gelöst] Code 67 beim Verbinden eines Netzlaufwerkes
 
Hallo,

ich versuche mich gerade an einer Consolenanwendung.
Aus diversen Codeschnipseln habe ich das untenstehende zusammengesetzt.

Das Programm soll einen freien Laufwerksbuchstaben finden (das tut es auch) und
auf diesen Laufwerksbuchstaben ein Netzlaufwerk verbinden ein Programm ausführen
und danach das Laufwerk wieder trennen.

Problem ist, bei dem Versuch das Laufwerk anzubinden bekomme ich folgende Fehlermeldung:

D:\development\Delphi6\Projects\mountTool>netInsta ll
Exception EOSError in module mapfree.exe at 0000ACAA.
System Error. Code: 67.
Der Netzwerkname wurde nicht gefunden.

Nun, nach langem Suchen bin ich nicht fündig geworden wo das Problem liegt.
Ich kann von der Kommandozeile (DosBox) das Laufwerk mit den Parametern verbinden.
Es hilft auch nichts den Rechnernamen mit der IPAdresse auszutauchen.

Vielleicht was ja jemand von Euch einen Rat.

Grüße
Klaus

Delphi-Quellcode:
program netInstall;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  windows,
  shellAPI,Dialogs;



function DriveExists(DriveByte: Byte): Boolean;
begin
  Result := GetLogicalDrives and (1 shl DriveByte) <> 0;
end;

function DriveType(DriveByte: Byte): String;
begin
  case GetDriveType(PChar(Chr(DriveByte + Ord('A')) + ':\')) of
    DRIVE_UNKNOWN: Result := 'unbekannt';
    DRIVE_NO_ROOT_DIR: Result := 'Laufwerk existiert nicht';
    DRIVE_REMOVABLE: Result := 'Wechselmedium';
    DRIVE_FIXED: Result := 'Festplatte';
    DRIVE_REMOTE: Result := 'Netzwerk';
    DRIVE_CDROM: Result := 'CD-ROM/DVD';
    DRIVE_RAMDISK: Result := 'RAM Disk';
  else
    Result := 'anderer Laufwerkstyp';
  end;
end;

function ConnectNetworkDrive(const ADrive: String;
  const ADirectory, AUsername, APassword: String;
  const ARestoreAtLogon: Boolean ): Boolean;
var
  NetResource: TNetResource;
  dwFlags:    DWORD;
  lPwd, lUser: PChar;
begin
  NetResource.dwType:=RESOURCETYPE_DISK;
  NetResource.lpLocalName:=PChar(ADrive);
  NetResource.lpRemoteName:=PChar(ADirectory);
  NetResource.lpProvider:=nil;

  if ARestoreAtLogon then
    dwFlags:=CONNECT_UPDATE_PROFILE
  else
    dwFlags:=0;

  if AUsername<>'' then
    lUser:=PChar(AUsername)
  else
    lUser:=nil;

  if APassword<>'' then
    lPwd:=PChar(APassword)
  else
    lPwd:=nil;

  Result:=WNetAddConnection2(NetResource,
                             lPwd,
                             lUser,
                             dwFlags)=NO_ERROR;
end;





VAR
  i:Byte;
  found: Boolean;
  drives: Array[1..26] of char;

  freeDrive:String;

begin
  // init array
  FOR i:=1 TO 26 DO
    drives[i]:=' ';

  //mark any entry within the array which have a drive
  FOR i:=1 TO 26 DO
    begin
      if driveExists(i) THEN
        drives[(i + Ord('A')-ORD('A'))]:='x';
    end;

   // search for an available drive letter
   i:=1;
   found := false;
   REPEAT
     found := drives[i] = ' ';
     inc(i)
   until (i > 26) OR found;

   freeDrive:=lowerCase(chr(ord('A')+i-1))+':';

   // map network drive to available drive letter
   if ConnectNetworkDrive(freeDrive,' \\mhhb2kpc.mchh1.siemens.de\TMSetup',' /user:mhhb2kpc.mchh1.siemens.de\TMSetup ',' @siemens01  ',false) then
     WriteLn('Networkdrive connected')
   else
     begin
       RaiseLastOSError;
     end;

   IF fileExists(freedrive+'\test\project1.exe') THEN
     BEGIN
       WinExec(PChar(freedrive+'\test\project1.exe'),sw_show);
     END;
   // remove mapped network drive
   shellexecute(0,'open','net',PChar('use '+freedrive+' /delete'),nil,sw_hide);

  { TODO -oUser -cConsole Main : Insert code here }
end.

Klaus01 17. Jan 2006 17:55

Re: [gelöst] Code 67 beim Verbinden eines Netzlaufwerkes
 
manchmal hat man auch ein Brett vor dem Kopf.

Die Lösung ist: das /user: for dem Usernamen wegzulassen
das kommt davon wenn man zuviel mit net use arbeitet.

tn249 17. Jan 2006 18:03

Re: [gelöst] Code 67 beim Verbinden eines Netzlaufwerkes
 
Funktioniert das auch für Win98Se?
oder geht das nur mit den neueren versionen von windows?

Gruß
Thomas

Klaus01 17. Jan 2006 18:47

Re: [gelöst] Code 67 beim Verbinden eines Netzlaufwerkes
 
@tn249
Kann ich leider nicht testen (habe hier w3k server und w2k client), sollte aber für alle Win32 Systeme funktionieren.
Wenn man bei Win98se keine Usernamen und Passwörte braucht kann man die auch weglassen.

Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz