PDF24-Drucker druckt seit 11.33.0 nicht (Windows 10, Server 2016–2022)

Start › Foren › PDF24 Creator › PDF24-Drucker druckt seit 11.33.0 nicht (Windows 10, Server 2016–2022)

Ansicht von 14 Beiträgen – 1 bis 14 (von insgesamt 14)
  • Autor
    Beiträge
  • #21856
    joe1988
    Teilnehmer

    Hallo zusammen,

    es gibt seit kurzem bei uns Probleme bei Nutzung auf dem Terminalserver.

    Der PDF24 Drucker geht springt immer wieder in den Fehlerzustand und es lassen sich so keine PDFs mehr generieren.

    Inhalt pdfPrnInst:

    Cmdline args: "-printerName" "PDF24" "-defaultPort" "-upgrade" "-printerType" "ps" "-allUsers" "-log" "C:\Program Files\PDF24\pdfPrnInst.log" "installPrinter"

    Reading printer infos

    Checking printer: 'PDF24'

    Printer does not exist: 'PDF24'

    Current default printer: 'Nitro PDF Creator'

    Checking port: '\\?\pipe\PDFPrint'

    Port does not exist: '\\?\pipe\PDFPrint'

    Installing local port: '\\?\pipe\PDFPrint'

    Local port installed: '\\?\pipe\PDFPrint'

    Extracting core driver files

    Adding PS printer driver: 'PDF24' 'C:\Windows\TEMP\PDF24\0_29939171_112680180\pdf24.ppd'

    GetPrinterDriverDirectory: 0 'C:\Windows\system32\spool\DRIVERS\x64'

    Existing PS driver file: 'C:\Windows\system32\spool\DRIVERS\x64\PS5UI.DLL' arch 'x64' version '0.3.9600.17415'

    Existing PS driver file: 'C:\Windows\system32\spool\DRIVERS\x64\PSCRIPT5.DLL' arch 'x64' version '0.3.9600.17415'

    Copying PS printer driver files

    Searching for PS printer driver lookup pathes

    GetPrinterDriverDirectory: 0 'C:\Windows\system32\spool\DRIVERS\x64'

    Searching for cab files: 'ntprint.inf_x64_*.cab' 'C:\Windows\system32\spool\DRIVERS\x64\PCC'

    No match found: 'ntprint.inf_x64_*.cab' 'C:\Windows\system32\spool\DRIVERS\x64\PCC'

    Searching for cab files: 'ntprint.inf_amd64_*.cab' 'C:\Windows\system32\spool\DRIVERS\x64\PCC'

    Found match: 'ntprint.inf_amd64_7b5a6d8dd4fe5c0e.cab' 'C:\Windows\system32\spool\DRIVERS\x64\PCC'

    Searching in driver store repository: 'ntprint.inf_x64_*'

    No matches for filter: ntprint.inf_x64_*

    Searching in driver store repository: 'ntprint.inf_amd64_*'

    Found match: ntprint.inf_amd64_7b5a6d8dd4fe5c0e

    Lookup path: 'C:\Windows\system32\spool\DRIVERS\x64\3'

    Lookup path: 'C:\Windows\system32\spool\DRIVERS\x64\PCC\ntprint.inf_amd64_7b5a6d8dd4fe5c0e.cab'

    Lookup path: 'C:\Windows\System32\DriverStore\FileRepository\ntprint.inf_amd64_7b5a6d8dd4fe5c0e'

    GetPrinterDriverDirectory: 0 'C:\Windows\system32\spool\DRIVERS\x64'

    Copying datafile: 'C:\Windows\TEMP\PDF24\0_29939171_112680180\pdf24.ppd' -> 'C:\Windows\system32\spool\DRIVERS\x64\pdf24.ppd'

    Copying: 'C:\Windows\system32\spool\DRIVERS\x64\3\PSCRIPT.NTF' -> 'C:\Windows\system32\spool\DRIVERS\x64\PSCRIPT.NTF'

    Copying: 'C:\Windows\system32\spool\DRIVERS\x64\3\PSCRIPT.HLP' -> 'C:\Windows\system32\spool\DRIVERS\x64\PSCRIPT.HLP'

    All PS printer driver files available

    PS printer driver added: 'PDF24' 'C:\Windows\TEMP\PDF24\0_29939171_112680180\pdf24.ppd'

    Deleting copied PS printer driver files: 3

    Deleting: 'C:\Windows\system32\spool\DRIVERS\x64\pdf24.ppd'

    Deleting: 'C:\Windows\system32\spool\DRIVERS\x64\PSCRIPT.NTF'

    Deleting: 'C:\Windows\system32\spool\DRIVERS\x64\PSCRIPT.HLP'

    Adding printer: 'PDF24' 'PDF24' '\\?\pipe\PDFPrint'

    Printer added: 'PDF24' 'PDF24' '\\?\pipe\PDFPrint'

    Service PDF -> port \\?\pipe\PDFPrint (0)

    Setting printer config for: 'PDF24'

    Printer config updated for: 'PDF24'

    Form '4A': 1682044 x 2380897 -> 1682044 x 2378075 um: updated

    Form 'A7': 74083 x 104775 -> 74083 x 105128 um: updated

    Form 'A8': 52211 x 74083 -> 51858 x 74083 um: updated

    Form 'A9': 37042 x 52211 -> 37042 x 51858 um: updated

    Form 'A10': 25753 x 37042 -> 26106 x 37042 um: updated

    Form 'Envelope C2': 457200 x 648053 -> 457906 x 648053 um: updated

    Form 'Envelope C3': 323850 x 457200 -> 323850 x 457906 um: updated

    Form 'RA0': 859719 x 1219906 -> 860072 x 1219906 um: updated

    Form 'RA1': 609953 x 859719 -> 609953 x 860072 um: updated

    Form 'RA2': 429683 x 609953 -> 430036 x 609953 um: updated

    Form 'RA3': 304991 x 430001 -> 305153 x 430036 um: updated

    Form 'RA4': 214990 x 304991 -> 214842 x 305153 um: updated

    Form 'SRA2': 449792 x 639939 -> 450144 x 639939 um: updated

    Form 'SRA3': 319998 x 450003 -> 319969 x 450144 um: updated

    Form 'SRA4': 225002 x 319998 -> 225072 x 319969 um: updated

    Forms updated: 15

    Printer installed successfully: 'PDF24'

    Current default printer: 'PDF24'

    Default printer has changed, trying to switch back

    Migrating pipe ports \\.\pipe\... -> \\?\pipe\...

    Port '\\.\pipe\PDFPrint' deleted: yes

    Port '\\.\pipe\FaxPrint' deleted: yes

    Pipe port migration: 0 printer(s) moved, 0 failed

    EXIT_CODE=0

    Auf einem Windows-Terminalserver (Version: 11.33.0) scheitert der Druck auf den PDF24-Drucker. Ereignis 372 (PrintService/Admin): „Vom Druckprozessor zurückgegebener Win32-Fehlercode: 50. Die Anforderung wird nicht unterstützt.“ Druckprozessor winprint, Port \?\pipe\PDFPrint, Datentyp NT EMF 1.008, Testseite ebenfalls betroffen. Der PDF24-Dienst läuft, die Pipes sind vorhanden. Eine Neuinstallation von PDF24 (Version 11.33.0) hat nichts geändert, Microsoft Print to PDF funktioniert auf demselben Server. Erster Fehler heute um 12:04, davor ist uns nichts aufgefallen. Echtzeitschutz: Securepoint Antivirus Pro. Gibt es dafür bekannte Ursachen?

    #21857
    fisics
    Teilnehmer

    Das gleiche habe ich hier.

    Kann man irgendwo die alte Version herunterladen.. und: bringt das überhaupt was?

    Ich habe hier leichte Eskalation.

    #21858
    joe1988
    Teilnehmer

    Moin, ich habe gerade die 11.31.1 installiert. Damit läuft es wieder.

    Die findest du hier: https://creator.pdf24.org/listVersions.php

    Sollte aber nur eine Übergangslösung sein. Ich hoffe, es gibt hier schnell eine allgemein verfügbare Lösung seitens PDF24.

    LG Joe

    #21860
    fisics
    Teilnehmer

    Übrigens: Wir nutzen "nur" den Defender als Virenschutz auf den Kisten.

    #21861
    micha93
    Teilnehmer

    Wir sehen exakt denselben Fehler auf mindestens vier Windows-10-PCs (22H2, Build 19045.6456, klassischer PostScript-Drucker): Ereignis 372, Win32-Fehlercode 50, winprint, \?\pipe\PDFPrint, NT EMF 1.008. Erster Fehler Montag, 09.11., gegen 11:30 Uhr. Betroffen sind 11.33.0 und 11.32.0. Auch eine Windows-Testseite scheitert, ebenso mit dem Anschluss NUL:. Ein Testdrucker mit dem Windows-Treiber „Microsoft PS Class Driver“ druckt dagegen. Dienst läuft, Neuinstallation ändert nichts, Treiberdateien und Registry von Drucker und Treiber sind identisch, keine ASR-Sperren von Defender, seit September keine neuen Windows-Updates. Gibt es eine bekannte Ursache?

    #21862
    joe1988
    Teilnehmer

    Bei mir hat ein Rollback auf 11.31.1 geholfen. Ältere Versionen finden sich auch auf der offiziellen Seite.

    https://creator.pdf24.org/listVersions.php

    Scheint irgendwas mit der Umstellung auf WPP Druck zu tun zu haben.

    #21864
    joe1988
    Teilnehmer

    Bei mir hat ein Rollback auf 11.31.1 geholfen.

    Auf der Downloadseite findet ihr ganz unten den Link "Alle Versionen anzeigen" - da kommt dann eine Seite mit allen älteren Versionen. Es scheint hier was mit der Umstellung auf den WPP Druck zu tun zu haben. Ghostscript scheint hier nicht zu greifen. Auch nicht wenn man per CMD und entsprechendem Parameter mit dem MSI Installer installiert.

    #21865
    fisics
    Teilnehmer

    Danke für den Hinweis. Teste ich direkt.

    #21866
    qwertzonimo
    Teilnehmer

    ein rollback auf 11.32 funktioniert bei uns. 11.33 hingegen nicht.

     

    #21867
    joe1988
    Teilnehmer

    Okay, ich habe jetzt über einen Workaround auch die aktuelle Version ans laufen gebracht 😊

    Die neue Version installiert hier auch die Pipe anders, damit scheint Server 2019 auch nicht wirklich klarzukommen.

    Neue Version: \\?\pipe\PDFPrint

    Alte Version: \\.\pipe\PDFPrint

    # 1. Alten Port anlegen und dem Drucker zuweisen
    if (-not (Get-PrinterPort -Name '\\.\pipe\PDFPrint' -ErrorAction SilentlyContinue)) {
    Add-PrinterPort -Name '\\.\pipe\PDFPrint'
    }
    Set-Printer -Name PDF24 -PortName '\\.\pipe\PDFPrint'
    
    # 2. PDF24-Zuordnung angleichen, Dienste neu starten
    Set-ItemProperty HKLM:\SOFTWARE\PDF24\Services\PDF -Name Port -Value '\\.\pipe\PDFPrint'
    Restart-Service Spooler -Force
    Get-Service *pdf24* | Restart-Service

    Danach gehts auch mit der neuen Version 😊

    #21871
    PDF24 Support
    Moderator

    Hallo,

    das liegt an PDF24 11.33.0: Seit dieser Version heißt der Anschluss des klassischen PDF-Druckers \\?\pipe\PDFPrint. Windows 10, Windows 11 bis 21H2 und Windows Server 2016 bis 2022 erkennen diesen Anschluss nicht als Pipe, deshalb bleiben die Aufträge mit einem Fehler in der Warteschlange (Ereignis 372, Fehlercode 50). Eine Neuinstallation oder ein Neustart des PDF24-Dienstes hilft dagegen nicht. Ab Windows 11 22H2 tritt der Fehler nicht auf.

    Die Korrektur kommt mit der nächsten Version: Das Update stellt den Drucker auf diesen Systemen wieder auf den Anschluss \\.\pipe\PDFPrint um.

    Bis dahin gibt es zwei Wege:

    1. Den Drucker selbst umstellen. Öffnen Sie Windows PowerShell als Administrator und führen Sie diese beiden Befehle aus:
    Add-PrinterPort -Name '\\.\pipe\PDFPrint'
    Set-Printer -Name 'PDF24' -PortName '\\.\pipe\PDFPrint'

    Haben Sie den Drucker umbenannt, setzen Sie statt PDF24 seinen Namen ein. 11.33.0 hat den alten Anschluss gelöscht, deshalb muss er zuerst neu angelegt werden. PDF24 versteht beide Anschlussnamen.

    1. Version 11.32.0 wieder installieren, sie verwendet noch den alten Anschluss. Ältere Versionen finden Sie hier: https://creator.pdf24.org/listVersions.php

    Wie im zweiten Beitrag gefragt: Ja, das hilft, mit 11.32.0 druckt der PDF-Drucker auf diesen Systemen wieder.

    Installieren Sie danach 11.33.0 bitte nicht erneut, auch nicht über die Update-Funktion, sonst stellt dessen Setup den Drucker wieder auf \\?\pipe\PDFPrint um.

    #21873
    fisics
    Teilnehmer

    Danke.

    Funktioniert wieder 🙂

     

    #21875
    joe1988
    Teilnehmer

    Wir installieren (und updaten) PDF24 per PS-Script und verteilen das per GPO.
    Ich habe das jetzt einmal so angepasst, dass die Pipe-Korrektur mit drin ist.
    Falls das noch jemand per GPO verteilt hier einfach mal das Script:

    <#
    .SYNOPSIS
        PDF24 automatische Installation und Update - Hybrid (MSI + winget Fallback)
    .DESCRIPTION
        Laeuft als SYSTEM via Scheduled Task (GPO).
        Strategie:
          1. Aktuelle PDF24-Version vom Hersteller-Endpoint ermitteln (HTML-Scrape)
          2. Installierte Version aus Registry lesen
          3. Wenn nicht installiert oder alte Version: MSI-Direktdownload + Install
          4. Bei MSI-Fehler: winget als Fallback
          5. Port-Korrektur: PDF24-Drucker, die seit 11.33.0 auf einem Port der Form
             \\?\pipe\... haengen, werden auf den alten Port \\.\pipe\... zurueckgestellt
             (laeuft bei JEDEM Durchlauf, auch wenn kein Update noetig war, weil jedes
             PDF24-Update/jede Reparatur die Drucker wieder auf \\?\ umstellt).
        Loggt nach %ProgramData%\PDF24-AutoUpdate\PDF24-AutoUpdate.log
    .NOTES
        Version: 2.1
        2.1: Schritt 5 (Port-Korrektur), Schalter $UseLegacyPipePort
    
        Hinweis: Schritt 5 ist ein inoffizieller Workaround und stammt nicht vom
        PDF24-Hersteller. Vor dem breiten Einsatz auf einem Testsystem pruefen.
        Nutzung auf eigene Verantwortung.
    #>
    
    # --- Konfiguration ---
    $LogDir         = Join-Path $env:ProgramData "PDF24-AutoUpdate"
    $LogFile        = Join-Path $LogDir "PDF24-AutoUpdate.log"
    $WorkDir        = Join-Path $LogDir "Cache"
    $WingetId       = "PDF24.PDF24"
    $VersionListUrl = "https://creator.pdf24.org/listVersions.php"
    $MsiBaseUrl     = "https://download.pdf24.org"
    
    # Port-Korrektur (Schritt 5): $true = PDF24-Drucker auf alten Port \\.\pipe\... stellen
    # Auf $false setzen, sobald PDF24 das Problem mit \\?\pipe\... behoben hat.
    $UseLegacyPipePort = $true
    
    # MSI-Argumente fuer alle msiexec-Aufrufe
    $MsiSilentArgs = @(
        "/qn",
        "/norestart",
        "AUTOUPDATE=No",       # Auto-Update vom Programm selbst aus, GPO uebernimmt das
        "DESKTOPICONS=No",     # Keine Desktop-Verknuepfungen
        "FAXPRINTER=No",       # Kein Fax-Drucker
        "ALLUSERS=2"           # Per-Machine-Installation
    )
    
    # --- Setup ---
    if (-not (Test-Path $LogDir))  { New-Item -Path $LogDir  -ItemType Directory -Force | Out-Null }
    if (-not (Test-Path $WorkDir)) { New-Item -Path $WorkDir -ItemType Directory -Force | Out-Null }
    
    # TLS 1.2 erzwingen (relevant fuer Win10 ohne Updates)
    [Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12
    
    function Write-Log {
        param([string]$Message, [string]$Level = "INFO")
        $stamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
        "$stamp [$Level] $Message" | Out-File -FilePath $LogFile -Append -Encoding UTF8
    }
    
    function Get-InstalledPDF24Version {
        # PDF24 traegt sich unter HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall ein
        $uninstallKeys = @(
            "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall",
            "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall"
        )
        foreach ($keyRoot in $uninstallKeys) {
            if (-not (Test-Path $keyRoot)) { continue }
            $entries = Get-ChildItem $keyRoot -ErrorAction SilentlyContinue |
                       Get-ItemProperty -ErrorAction SilentlyContinue |
                       Where-Object { $_.DisplayName -like "PDF24 Creator*" }
            foreach ($e in $entries) {
                if ($e.DisplayVersion) {
                    return [PSCustomObject]@{
                        Version       = $e.DisplayVersion
                        UninstallString = $e.UninstallString
                        DisplayName   = $e.DisplayName
                    }
                }
            }
        }
        return $null
    }
    
    function Get-LatestPDF24Version {
        # Scrape die Versionsliste
        try {
            $html = Invoke-WebRequest -Uri $VersionListUrl -UseBasicParsing -TimeoutSec 30
            # Suche nach Versionsnummern im Format X.Y.Z (erste = neueste)
            $match = [regex]::Match($html.Content, 'pdf24-creator-(\d+\.\d+\.\d+)(?:-x64)?\.msi')
            if ($match.Success) {
                return $match.Groups[1].Value
            }
        } catch {
            Write-Log "Konnte aktuelle Version nicht ermitteln: $_" "WARN"
        }
        return $null
    }
    
    function Get-SystemArchitecture {
        # Bestimmt die Architektur fuer MSI-Auswahl
        $arch = (Get-CimInstance Win32_Processor).Architecture
        # 0=x86, 5=ARM, 9=x64, 12=ARM64
        switch ($arch) {
            9       { return "x64" }
            12      { return "x64" }   # ARM64 kann x64-MSI via Emulation
            default { return "x86" }
        }
    }
    
    function Install-PDF24-MSI {
        param([string]$Version)
    
        $arch = Get-SystemArchitecture
        $msiName = "pdf24-creator-$Version-$arch.msi"
        $msiUrl  = "$MsiBaseUrl/$msiName"
        $msiPath = Join-Path $WorkDir $msiName
    
        Write-Log "Lade MSI: $msiUrl"
        try {
            Invoke-WebRequest -Uri $msiUrl -OutFile $msiPath -UseBasicParsing -TimeoutSec 300
        } catch {
            Write-Log "MSI-Download fehlgeschlagen: $_" "ERROR"
            return $false
        }
    
        if (-not (Test-Path $msiPath) -or (Get-Item $msiPath).Length -lt 10MB) {
            Write-Log "MSI-Datei fehlt oder ist zu klein (Download unvollstaendig)." "ERROR"
            return $false
        }
    
        Write-Log "MSI heruntergeladen ($([math]::Round((Get-Item $msiPath).Length / 1MB, 2)) MB). Starte Installation..."
    
        $msiLog = Join-Path $LogDir "PDF24-MSI-Install.log"
        $msiArgs = @("/i", "<code>&quot;$msiPath</code>"") + $MsiSilentArgs + @("/L*v", "<code>&quot;$msiLog</code>"")
    
        try {
            $process = Start-Process -FilePath "msiexec.exe" -ArgumentList $msiArgs -Wait -PassThru -NoNewWindow
            $exitCode = $process.ExitCode
    
            switch ($exitCode) {
                0     { Write-Log "MSI-Installation erfolgreich (Exit 0)." "SUCCESS"; return $true }
                3010  { Write-Log "MSI-Installation erfolgreich, Reboot erforderlich (Exit 3010)." "SUCCESS"; return $true }
                1641  { Write-Log "MSI-Installation erfolgreich, Reboot eingeleitet (Exit 1641)." "SUCCESS"; return $true }
                1638  { Write-Log "Eine andere Version ist bereits installiert (Exit 1638) - vermutlich gleiche Version." "WARN"; return $true }
                default { Write-Log "MSI-Installation fehlgeschlagen mit Exit Code $exitCode. Siehe $msiLog" "ERROR"; return $false }
            }
        } catch {
            Write-Log "msiexec-Aufruf fehlgeschlagen: $_" "ERROR"
            return $false
        } finally {
            # MSI-Cache aufraeumen (spart Plattenplatz auf Notebooks)
            Remove-Item $msiPath -Force -ErrorAction SilentlyContinue
        }
    }
    
    function Find-Winget {
        # Strategie 1: Get-AppxPackage
        try {
            $pkg = Get-AppxPackage -AllUsers -Name "Microsoft.DesktopAppInstaller" -ErrorAction SilentlyContinue |
                   Sort-Object -Property Version -Descending |
                   Select-Object -First 1
            if ($pkg) {
                $candidate = Join-Path $pkg.InstallLocation "winget.exe"
                if (Test-Path $candidate) { return $candidate }
            }
        } catch { }
    
        # Strategie 2: Wildcard-Suche
        $patterns = @(
            "$env:ProgramFiles\WindowsApps\Microsoft.DesktopAppInstaller_*_x64*\winget.exe",
            "$env:ProgramFiles\WindowsApps\Microsoft.DesktopAppInstaller_*_arm64*\winget.exe",
            "$env:ProgramFiles\WindowsApps\Microsoft.DesktopAppInstaller_*\winget.exe"
        )
        foreach ($pattern in $patterns) {
            $found = Get-ChildItem -Path $pattern -ErrorAction SilentlyContinue |
                     Sort-Object LastWriteTime -Descending |
                     Select-Object -First 1
            if ($found) { return $found.FullName }
        }
    
        return $null
    }
    
    function Install-PDF24-Winget {
        Write-Log "Fallback: Versuche winget-Installation..."
    
        $wingetPath = Find-Winget
        if (-not $wingetPath) {
            Write-Log "winget nicht gefunden - Fallback nicht moeglich." "ERROR"
            return $false
        }
    
        Write-Log "Winget gefunden: $wingetPath"
    
        # Pruefen, ob installiert
        $installed = $false
        try {
            $listOutput = & $wingetPath list --id $WingetId --exact --accept-source-agreements 2>&1 | Out-String
            if ($listOutput -match [regex]::Escape($WingetId)) { $installed = $true }
        } catch { }
    
        $action = if ($installed) { "upgrade" } else { "install" }
    
        $wingetArgs = @($action, "--id", $WingetId, "--exact", "--silent",
                        "--accept-package-agreements", "--accept-source-agreements",
                        "--disable-interactivity")
        try {
            $output = & $wingetPath @wingetArgs 2>&1 | Out-String
            Write-Log "Winget Output:

    n$output"

    if ($LASTEXITCODE -eq 0) {
    Write-Log "winget ${action} erfolgreich." "SUCCESS"
    return $true
    } elseif ($LASTEXITCODE -eq -1978335189) {
    Write-Log "Kein Update verfuegbar (bereits aktuell)." "INFO"
    return $true
    } else {
    Write-Log "Winget Exit Code: $LASTEXITCODE" "WARN"
    return $false
    }
    } catch {
    Write-Log "winget-Aufruf fehlgeschlagen: $_" "ERROR"
    return $false
    }
    }

    function Set-PDF24LegacyPipePorts {
    <#
    Seit PDF24 11.33.0 haengen die klassischen PDF24-Drucker an Ports der Form
    \\?\pipe\PDFPrint. Auf betroffenen Systemen scheitern Druckauftraege dort
    mit Win32-Fehler 50 (Ereignis 372, Druckprozessor winprint). Diese Funktion stellt jeden Drucker auf den
    alten Port \\.\pipe\... zurueck und gleicht den Port-Wert in
    HKLM:\SOFTWARE\PDF24\Services\<ID> an.
    Idempotent: ohne Treffer passiert nichts. Rueckgabe: $true, wenn etwas
    geaendert wurde (dann ist ein Neustart von Spooler und PDF24-Dienst noetig).

    ACHTUNG: '?' ist in PowerShell ein Wildcard-Zeichen (-like, Get-PrinterPort
    -Name). Deshalb hier ueberall exakte String-Vergleiche (StartsWith / -eq).
    #>
    $newPrefix = '\\?\pipe\'
    $oldPrefix = '\\.\pipe\'
    $cmp = [StringComparison]::OrdinalIgnoreCase
    $changed = $false

    # --- Drucker umstellen ---
    $printers = @(Get-Printer -ErrorAction SilentlyContinue |
    Where-Object { $_.PortName -and $_.PortName.StartsWith($newPrefix, $cmp) })

    if ($printers.Count -eq 0) {
    Write-Log "Port-Check: Kein Drucker auf einem \\?\pipe\-Port. Nichts zu tun."
    }

    foreach ($p in $printers) {
    $oldPort = $oldPrefix + $p.PortName.Substring($newPrefix.Length)
    Write-Log "Port-Check: Drucker '$($p.Name)' haengt auf '$($p.PortName)' -> Ziel '$oldPort'" "WARN"

    $exists = @(Get-PrinterPort -ErrorAction SilentlyContinue |
    Where-Object { $_.Name -eq $oldPort }).Count -gt 0
    if (-not $exists) {
    try {
    Add-PrinterPort -Name $oldPort -ErrorAction Stop
    Write-Log "Port '$oldPort' angelegt."
    } catch {
    Write-Log "Port '$oldPort' konnte nicht angelegt werden: $_" "ERROR"
    continue
    }
    }

    try {
    Set-Printer -Name $p.Name -PortName $oldPort -ErrorAction Stop
    Write-Log "Drucker '$($p.Name)' auf Port '$oldPort' umgestellt." "SUCCESS"
    $changed = $true
    } catch {
    Write-Log "Umstellen von '$($p.Name)' fehlgeschlagen: $_" "ERROR"
    }
    }

    # --- PDF24-Zuordnung (Port-Wert je Drucker-Eintrag) angleichen ---
    $svcRoot = 'HKLM:\SOFTWARE\PDF24\Services'
    if (Test-Path $svcRoot) {
    foreach ($key in (Get-ChildItem $svcRoot -ErrorAction SilentlyContinue)) {
    $port = (Get-ItemProperty -LiteralPath $key.PSPath -ErrorAction SilentlyContinue).Port
    if ($port -and $port.StartsWith($newPrefix, $cmp)) {
    $newValue = $oldPrefix + $port.Substring($newPrefix.Length)
    try {
    Set-ItemProperty -LiteralPath $key.PSPath -Name Port -Value $newValue -ErrorAction Stop
    Write-Log "Registry '$($key.PSChildName)': Port '$port' -> '$newValue'" "SUCCESS"
    $changed = $true
    } catch {
    Write-Log "Registry '$($key.PSChildName)' konnte nicht angepasst werden: $_" "ERROR"
    }
    }
    }
    }

    return $changed
    }

    # ===========================================================================
    # MAIN
    # ===========================================================================

    Write-Log "========== Start PDF24 Auto-Update v2.1 =========="
    Write-Log "Computer: $env:COMPUTERNAME | User: $env:USERNAME"
    Write-Log "OS: $([System.Environment]::OSVersion.VersionString) | Arch: $(Get-SystemArchitecture)"

    # Schritt 1: Installierte Version pruefen
    $installed = Get-InstalledPDF24Version
    if ($installed) {
    Write-Log "Installiert: $($installed.DisplayName) v$($installed.Version)"
    } else {
    Write-Log "PDF24 ist NICHT installiert."
    }

    # Schritt 2: Aktuelle Version ermitteln
    $latestVersion = Get-LatestPDF24Version
    if ($latestVersion) {
    Write-Log "Aktuell verfuegbar: v$latestVersion"
    } else {
    Write-Log "Konnte aktuelle Version nicht ermitteln - ueberspringe Versionscheck." "WARN"
    }

    # Schritt 3: Entscheidung Install/Update/Skip
    $needsAction = $false
    if (-not $installed) {
    Write-Log "Aktion: Neuinstallation"
    $needsAction = $true
    } elseif ($latestVersion -and ([version]$installed.Version -lt [version]$latestVersion)) {
    Write-Log "Aktion: Update von v$($installed.Version) auf v$latestVersion"
    $needsAction = $true
    } elseif ($latestVersion) {
    Write-Log "PDF24 ist aktuell (v$($installed.Version)). Keine Aktion noetig." "SUCCESS"
    } else {
    Write-Log "PDF24 installiert, aber Versionscheck nicht moeglich. Keine Aktion." "INFO"
    }

    # Schritt 4: Ausfuehrung mit Fallback
    if ($needsAction) {
    $success = $false

    if ($latestVersion) {
    $success = Install-PDF24-MSI -Version $latestVersion
    } else {
    Write-Log "Keine Versionsinformation - ueberspringe MSI-Methode, gehe direkt zu winget." "WARN"
    }

    if (-not $success) {
    Write-Log "MSI-Methode fehlgeschlagen oder nicht moeglich - probiere winget-Fallback..." "WARN"
    $success = Install-PDF24-Winget
    }

    if ($success) {
    Write-Log "Aktion erfolgreich abgeschlossen." "SUCCESS"
    } else {
    Write-Log "Beide Methoden (MSI + winget) fehlgeschlagen." "ERROR"
    }
    }

    # Schritt 5: Port-Korrektur (immer, auch ohne Update - PDF24 stellt bei jedem
    # Update/jeder Reparatur wieder auf \\?\pipe\... um)
    if ($UseLegacyPipePort) {
    if (Get-InstalledPDF24Version) {
    try {
    if (Set-PDF24LegacyPipePorts) {
    Write-Log "Ports geaendert - starte Spooler und PDF24-Dienst neu."
    Restart-Service -Name Spooler -Force -ErrorAction SilentlyContinue
    Get-Service -Name '*pdf24*' -ErrorAction SilentlyContinue |
    Restart-Service -Force -ErrorAction SilentlyContinue
    Write-Log "Port-Korrektur abgeschlossen." "SUCCESS"
    }
    } catch {
    Write-Log "Port-Korrektur fehlgeschlagen: $_" "ERROR"
    }
    } else {
    Write-Log "Port-Korrektur uebersprungen: PDF24 nicht installiert."
    }
    } else {
    Write-Log "Port-Korrektur deaktiviert (UseLegacyPipePort = false)."
    }

    Write-Log "========== Ende =========="`

    #21901
    tit700
    Teilnehmer

    Böser Fehler! Hab unter Win 10 jetzt zwei Stunden über die KI nach Installations- und Windowsfehlern gesucht. Wir beide sind völlig am Ende 😉 Leider erst zu guter Letzt fiel mir das Forum ein ...

Ansicht von 14 Beiträgen – 1 bis 14 (von insgesamt 14)
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.