# HP Universal Print Driver - Offline USB Installer

Standalone offline installer for HP Universal Print Driver for USB-connected printers.

## Overview

This installer packages the HP Universal Printing PCL 6 driver for offline installation on computers that need to connect HP printers via USB. No network or database connection is required.

**Designed for Windows 7+ systems with outdated root certificates.**

## Features

- **Offline Installation**: No network connection required
- **USB Plug-and-Play**: After driver installation, connect printer via USB and Windows auto-detects
- **Multi-Architecture**: Supports both 32-bit and 64-bit Windows
- **Windows 7 Compatible**: Handles certificate trust issues on older systems
- **Certificate Bypass**: Automatically installs driver certificate to trusted store
- **Simple UI**: Welcome page -> Install -> Done

## Driver Information

| Property | Value |
|----------|-------|
| **Driver Name** | HP Universal Printing PCL 6 |
| **Version** | 7.2.0 |
| **Architectures** | x64 and x32 |
| **Connection** | USB |
| **Min Windows** | Windows 7 SP1 |

## Windows 7 Certificate Handling

This installer addresses the "untrusted certificate" issue on Windows 7 systems that lack updated root certificates:

### What It Does

1. **Installs Certificate**: Adds the HP signing certificate from the driver catalog (.cat) file to:
   - `TrustedPublisher` store - Trusts the driver publisher

2. **Disables Signature Enforcement**: Sets driver signing policy to "Ignore" via registry:
   - `HKLM\SOFTWARE\Microsoft\Driver Signing`
   - `HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Driver Signing`

3. **Multiple Install Methods**: Tries several approaches for compatibility:
   - `pnputil -i -a` (Windows 7 syntax)
   - `pnputil /add-driver /install` (Windows 10+ syntax)
   - `rundll32 printui.dll,PrintUIEntry` (fallback)

## Project Structure

```
HPOfflineInstaller/
├── HPOfflineInstaller.iss        # Main Inno Setup script
├── README.md                      # This file
├── test_hp_install.bat           # Test script for manual testing
├── gea-logo.ico                  # Application icon
├── patrick.bmp                   # Wizard image (164x314px)
├── patrick-sm.bmp                # Small wizard image (55x58px)
└── drivers/
    ├── hp_x64/                   # 64-bit driver files
    │   ├── hpcu345u.inf          # Main INF file
    │   └── hpcu345u.cat          # Certificate catalog
    └── hp_x32/                   # 32-bit driver files
        ├── hpcu345c.inf          # Main INF file
        └── hpcu345c.cat          # Certificate catalog
```

## Building the Installer

### Requirements
- Windows machine with Inno Setup 6 installed
- All files in this directory

### Steps
1. Copy this folder to a Windows machine
2. Open `HPOfflineInstaller.iss` in Inno Setup Compiler
3. Press F9 to compile
4. Output: `Output\HPOfflineInstaller.exe`

### Command Line Build
```batch
"C:\Program Files (x86)\Inno Setup 6\ISCC.exe" HPOfflineInstaller.iss
```

## Running the Installer

1. Run `HPOfflineInstaller.exe` as **Administrator**
2. Click Next on the Welcome page
3. Watch installation progress:
   - Step 1: Installing certificate to trusted store
   - Step 2: Disabling driver signature enforcement
   - Step 3: Installing printer driver
4. Press any key to close
5. Connect your HP printer via USB
6. Windows will automatically detect and configure the printer

## Silent Installation

```batch
HPOfflineInstaller.exe /VERYSILENT /NORESTART
```

## Testing Before Deployment

Use `test_hp_install.bat` to test on target machines:

1. Copy `drivers\hp_x64` folder to `C:\temp\hp_drivers` on the target machine
2. Run `test_hp_install.bat` as Administrator
3. Verify all steps complete successfully

## How It Works

1. **Extract**: Driver files extracted to temp folder
2. **Certificate**: Installs signing certificate to TrustedPublisher store using `certutil`
3. **Policy**: Disables driver signing enforcement via registry
4. **pnputil**: Adds driver package to Windows driver store
5. **PrintUI**: Registers driver with Windows Print Spooler (fallback)
6. **USB Detection**: When printer is connected, Windows matches it to installed driver

## Supported Printers

This universal driver supports most HP printers including:
- HP LaserJet series
- HP Color LaserJet series
- HP OfficeJet series
- HP PageWide series
- And many more HP models

## Troubleshooting

### "Access Denied" Error
- Run the installer as Administrator

### "Untrusted Certificate" Still Appears
If Windows still shows a certificate warning after installation:
1. Click **"Install this driver software anyway"**
2. The driver will install and work normally
3. This may occur on some Windows 7 configurations

### Driver Already Installed
- The installer will detect this and skip installation
- Your printer is ready to use

### Printer Not Detected After USB Connection
1. Open Device Manager
2. Look for any devices with warning icons
3. Right-click -> Update Driver -> Browse my computer
4. Select "Let me pick from a list"
5. Choose "HP Universal Printing PCL 6"

### Verify Driver Installation (Windows 7)
```cmd
wmic printer driver list brief | findstr /i hp
```

### Verify Driver Installation (Windows 10+)
```powershell
Get-PrinterDriver -Name "HP Universal Printing PCL 6"
```

### Verify Certificate Installation
```cmd
certutil -store TrustedPublisher
```

## Technical Details

### Registry Keys Modified
```
HKLM\SOFTWARE\Microsoft\Driver Signing
  Policy = 00 (BINARY) - Ignore signature enforcement

HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Driver Signing
  BehaviorOnFailedVerify = 0 (DWORD) - Ignore failed verification
```

### Certificate Stores Used
- `TrustedPublisher` - Machine-level trusted publishers

### Installation Methods (in order)
1. `pnputil -i -a <inf>` - Windows 7
2. `pnputil /add-driver <inf> /install` - Windows 10+
3. `rundll32 printui.dll,PrintUIEntry /ia` - Driver registration fallback

## Version History

### Version 1.0 (2025-12-23)
- Initial release
- HP Universal Printing PCL 6 v7.2.0
- x64 and x32 support
- Windows 7 certificate bypass

---

**Internal use only - WJDT / GE Aerospace**
