Einzelnen Beitrag anzeigen

Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#1

[gelöst] Code 67 beim Verbinden eines Netzlaufwerkes

  Alt 17. Jan 2006, 16:50
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.
Klaus
  Mit Zitat antworten Zitat