Announcement

Collapse
No announcement yet.

DeletePrinter

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DeletePrinter

    Hallo zusammen,<p>
    wer kann mir zum Befehl <b>DeletePrinter</b> helfen? Ich habe folgendes Problem:<br>
    Mit dem Befehl "OpenPrinter" auf einen installierten Drucker bekomme ich ein Handle zurück.<br>
    Wenn ich nun mit diesem Handle DeletePrinter aufrufe bekomme ich "Error_Access_Denied" zurück.<br>
    Ich bin aber lokaler Administrator. Deshald habe ich folgendes Probiert:<br>
    Mit dem Befehl "AddPrinter" habe ich mir einen neuen Drucker installiert. Diese Funktion gibt mir ja auch ein Handle zurückk.<br>
    Rufe ich jetzt mit diesem Handle "DeletePrinter" auf funktioniert alles wunderbar.<br>
    Schlussfolgerung: Das Handle bei "OpenPrinter" ist falsch. Aber warum ???????<p>
    Bitte dringend um Hilfe.<br>
    Gruß Andreas

  • #2
    Hallo,

    da die Zeichenkette "lokaler Adminstrator" in der Frage vorkam, geht ich einmal davon aus, dass Windows NT/Windows 2000 eingesetzt wird. In diesem Fall sollte man beim Aufruf von OpenPrinter die PRINTER_DEFAULTS-Struktur ausfüllen und im Feld <i>DesiredAccess</i> das passende Flag setzen. Im Platform-SDK liest sich das so: "<i>Specifies desired access rights for a printer. The OpenPrinter function uses this member to set access rights to the printer. These rights can affect the operation of the SetPrinter and <b>DeletePrinter</b> functions. </i>"

    Comment


    • #3
      Hallo Andreas,<p>
      ja das habe ich auch schon versucht. Mein Programm sieht so aus:<p>
      var del: PRINTER_DEFAULTS;<br>
      f: Cardinal<br>
      <b>begin</b><br>
      del.pDatatype:=<b>nil</b>;<br>
      del.pDevMode:=<b>nil</b>;<br>
      del.DesiredAccess:=PRINTER_ACCESS_ADMINISTER;<br>
      OpenPrinter('Testdrucker',f,@del);<br>
      if DeletePrinter(f) = False then Showmessage(IntToStr(GetLastError));<br>
      <b>end</b>;<p>
      Muß ich vieleicht "pDateType" und "pDevMode" auch noch ausfüllen?<br>
      Andrea

      Comment


      • #4
        Hallo,

        wenn ich mir die Beschreibung zu OpenPrinter und DeletePrinter im Platform-SDK durchlesen, fällt mir nichts auf, was als Grund für dieses Problem herhalten könnte. Ich würde daher das Flag PRINTER_ALL_ACCESS ausprobieren ("<i>To perform all administrative tasks and basic printing operations except for SYNCHRONIZEI</i>"), denn dieses hat mehr Rechte als PRINTER_ACCESS_ADMINISTER.

        Falls das auch nicht hilft, würde ich <b>PRINTER_ALL_ACCESS or STANDARD_RIGHTS_ALL</b> ausprobieren ("<i>Combines DELETE, READ_CONTROL, WRITE_DAC, WRITE_OWNER, and SYNCHRONIZE access</i>").

        Geht das auch schief, müsste einer von uns beiden die entsprechenden Seiten im Platform SDK nochmals penibel genau durcharbeiten und auch alle Quer-Referenzen durchlesen ;-

        Comment


        • #5
          Jippi - hat funktioniert.<br>
          Vielen Dank Andreas. Mit "<b>PRINTER_ALL_ACCESS</b>"hat es geklappt.<p>
          Gruß Andrea

          Comment

          Working...
          X