Overview
The Printit.exe module in SIMATIC WinCC is responsible for rendering and spooling tag logging archive reports to the configured Windows print device. Under specific load conditions—particularly large archive volumes or particular printer driver metadata—Printit.exe can fault with an Application Error dialog reporting an inability to read memory at a specified address. This is a Microsoft Windows structured exception (access violation, 0xC0000005) raised inside the Printit.exe address space and propagated to the Windows graphical shell as 0xC0000005 or, in older message formats, as 0xC0000094 (integer divide by zero) when record counts cross internal threshold checks.
This article documents the field-reported failure mode first observed on WinCC V6.0 SP4 running on SIMATIC PC577 industrial PCs with Windows XP SP2, then traces the downstream Siemens engineering fixes that landed in WinCC V7.4 SP1 Update 9 (K7.4.1.9) and WinCC V7.4 SP1 Update 18 (K7.4.1.18), which explicitly harden PrintIT.exe and PrtScr.exe against memory and string-length failures during print jobs.
Problem Symptoms
Field symptom set for the Printit.exe failure:
- WinCC Report Designer or runtime print job shows "Reading data" status, then hangs or terminates.
- A Windows Application Error dialog appears with the title
Printit.exeand the body"The instruction at 0xNNNNNNNN referenced memory at 0xNNNNNNNN. The memory could not be read." - The failure correlates strongly with the number of archive tags selected for one print job (typical threshold behavior: > ~120–200 tags per job, depending on row count and column count).
- Earlier Service Packs (V6.0 SP1, SP2, SP3) on the same project do not exhibit the fault.
- The fault reproduces with deterministic timing once the print-job payload crosses a memory-allocation boundary inside Printit.exe.
Affected Versions and Environment
The original report was filed against the following hardware/software combination:
| Component | Value |
|---|---|
| SIMATIC industrial PC | PC577 40 GB HDD |
| Display | 15" TFT Touch, 1024 × 768 |
| CPU | Intel Celeron 2.0 GHz, 400 MHz FSB, 128 KB SLC |
| RAM | 1 GB DDR SDRAM (2 × 512 MB) |
| OS | Windows XP SP2 (32-bit) |
| HMI software | SIMATIC WinCC V6.0 SP4 |
| Module in fault | Printit.exe (tag logging report spooler) |
The fault class was carried forward by Siemens engineering and is explicitly addressed in subsequent WinCC V7.x maintenance branches.
Root Cause Analysis
Printit.exe maintains an internal buffer for archive row data and for the page-layout structure that is passed to the underlying Windows print spooler. Three distinct triggers have been confirmed by Siemens readme entries and field reproductions:
- Printer-name string length > 50 characters. When the Windows printer display name exceeds 50 characters (typical of clustered or copy-paste-renamed network printers), the buffer that Printit.exe allocates for the DEVNAMES structure is too small. Subsequent writes corrupt adjacent heap and produce an access violation during the read-back phase of the print job.
- Large tag count per print job. Each tag contributes an array of VARIANT cells to the Printit render buffer. Above a runtime-determined threshold the buffer grows into unmapped pages or, on 32-bit hosts with limited contiguous free virtual address space, fails a contiguous allocation request and dereferences a NULL or stale pointer.
- PrtScr.exe screen-capture race. The companion module PrtScr.exe shares the same printer-name parsing code path and can exhibit the same fault under identical printer-name conditions. Siemens explicitly references both modules in the same update notes.
Event ID 1000 / 1001) including the faulting module offset so the readme can be correlated.
Memory Limit Investigation
There is no published hard cap on the number of archive tags that WinCC will accept in a single print job; the practical limit is governed by the available contiguous virtual address space of the Printit.exe process and the per-row payload size. Use the following heuristic to size a print job before triggering it from runtime:
| Parameter | Formula / Value |
|---|---|
| Process virtual address ceiling (32-bit Win) | 2 GB user mode (default) / 3 GB with /3GB boot switch |
| Estimated per-tag payload | ≈ 256 B (VARIANT + locale + timestamp) per row sample |
| Estimated per-page payload | ≈ 4 KB header + N × per-row payload |
| Default Printit.exe working set on WinCC V6.x | ≈ 24–48 MB at idle; grows linearly with tag count |
| Soft cap observed on WinCC V6.0 SP4 (32-bit, 1 GB RAM) | ≈ 150 tags × 1000 rows before access-violation probability exceeds 5% |
For a WinCC project that must print more than this working envelope, partition the report into multiple print jobs (e.g., by time slice or tag group) rather than forcing one oversized job.
Solution: Apply the WinCC V7.4 SP1 Maintenance Update
The Siemens engineering response to the Printit.exe / PrtScr.exe stability class is documented in the official update readmes. Two updates are directly relevant:
| Update | Build | Fix Area | Readme |
|---|---|---|---|
| WinCC V7.4 SP1 Update 9 | K7.4.1.9 | Stability of PrtScr.exe when printer name > 50 chars; stability of PrintIT.exe when printing | WinCC V7.4 SP1 Update 9 Readme (PDF) |
| WinCC V7.4 SP1 Update 18 | K7.4.1.18 | Stability of PrtScr.exe when printer name > 50 chars; stability of PrintIT.exe when printing | WinCC V7.4 SP1 Update 18 Readme (PDF) |
Both updates widen the buffer allocation for the printer display name and harden the PrintIT.exe memory path against the oversize job condition.
Prerequisite Check Before Update
- Confirm installed WinCC version in the project: SIMATIC WinCC > About > Version.
- Verify the target is V7.4 SP1 or later. V6.0 SP4 cannot be patched directly to V7.4 SP1; plan a controlled migration.
- Capture a full project backup with
WinCC Explorer > Project > Duplicateor with theSIMATIC WinCC Project Migrator. - Record all installed options (WinCC/Connectivity Pack, WinCC/IndustrialDataBridge, WebNavigator, DataMonitor) so they can be re-applied at the new build.
- Document the license keys (CoL) for both the host and any client/sever stations.
Update Procedure
- Stop the WinCC Runtime and the
CCAgent,SQLANYs_WinCC, andPrintit.exeprocesses from Task Manager. - Insert the Siemens update medium or mount the downloaded ISO.
- Run
Setup.exeand select Update installation. The installer detects the existing V7.4 SP1 base and applies the new hotfix binaries only. - Restart the host. Confirm the new build with:
HKLM\SOFTWARE\Siemens\Automation\WinCC\Versions\Current→ value should readK7.4.1.9orK7.4.1.18. - Reactivate the WinCC license (automatic via Automation License Manager if an unbonded license is present).
- Reapply any custom action DLLs to
bin\and re-test.
Workarounds Without an Update
If a maintenance update cannot be applied immediately (production uptime, validated V6.0 SP4 baseline, regulated environment), the following operator and configuration changes reduce the probability of a Printit.exe fault:
Rename the Printer
Ensure the Windows display name of the target printer is 50 characters or fewer. This removes the buffer-overrun trigger entirely.
- Open Devices and Printers on the WinCC station.
- Right-click the printer → Printer properties → change the topmost Printer name field.
- Avoid embedded UNC paths in the display name; use the share alias only.
- Reboot the WinCC Runtime service so it picks up the new device enumeration.
Partition the Print Job
Split a large archive report into smaller jobs by time range or by tag group. In the WinCC Report Designer:
- Open the affected layout under Report Designer > Layouts.
- Replace a single Tag Table covering all tags with multiple tables, each limited to a tag group of 50–80 tags.
- Use a VB or C script action triggered by a button to call each layout in sequence with separate print spool entries.
Add Physical Memory and Enable /3GB
On 32-bit hosts the addressable user space is the dominant limit. Two mitigations:
- Increase physical RAM from 1 GB to 2 GB or more so the working set fits in physical memory.
- Add the
/3GBswitch toboot.ini(Windows XP) or viabcdedit /set IncreaseUserVA 3072(Windows 7/Server 2008 R2) to give user-mode processes a 3 GB virtual address space. WinCC is supported on the/3GBswitch but you must also set/USERVA=3030to reserve kernel pool.
Switch to a File-Based Report Export
For regulated archives where the on-paper copy is not strictly required, export the tag logging data via the CSV Provider or Connectivity Pack and print from Excel outside the WinCC runtime. This removes Printit.exe from the data path entirely.
Diagnostic Logging Procedure
Collect the Windows event log and WinCC diagnose folder before opening a support ticket. The field engineer in the original incident was specifically asked to attach all WinCC log files from ..\wincc\diagnose\.
- Stop the WinCC Runtime.
- Archive
%ProgramFiles%\Siemens\Automation\WinCC\diagnose\(or..\wincc\diagnose\on legacy paths). - Export
eventvwr.msc→ Windows Logs > Application as.evtx. - Capture
msinfo32 /report %temp%\msinfo.txtfor hardware and driver inventory. - For the printer subsystem, add PrintService operational log via
wevtutil sl Microsoft-Windows-PrintService/Operational /e:true. - Trigger one reproducible Printit.exe fault and capture the resulting access-violation dialog text verbatim.
- Zip and submit to Siemens Industry Online Support under the WinCC > Runtime > Tag Logging > Reporting queue.
Verification Steps
After applying the update or the workaround, verify the fix with a load-shaped print job:
- Open WinCC Explorer and trigger the largest archive report configured in the project.
- Confirm
Printit.exeremains in memory, working-set > 0 MB, and CPU activity cycles between idle and burst during spooling. - Confirm the print job completes with Status: Printed in the Windows print queue.
- Run the report three consecutive times in succession; intermittent faults indicate residual buffer issues and require escalation.
- Inspect
..\wincc\diagnose\WinCC_SStart_<date>.logfor any new error entries containingPrintitor0xC0000005.
Troubleshooting Matrix
| Symptom | Likely Trigger | First Action | Permanent Fix |
|---|---|---|---|
| Printit.exe AV immediately on print start | Printer display name > 50 chars | Rename printer to ≤ 50 chars | Apply V7.4 SP1 Update 9 or later |
| Printit.exe AV after "Reading data" stalls | Tag count exceeds working-set envelope | Reduce tags per job to 80 or less | Partition report; apply V7.4 SP1 Update 18 |
| PrtScr.exe AV (screen print shortcut) | Shared printer-name parsing code path | Rename printer | Apply V7.4 SP1 Update 9 / 18 |
| Printit.exe AV with small job but heavy rows | Locale / decimal-separator mismatch in archive export | Set regional format to English (US) or German (Germany) | Update to current WinCC build |
| Printit.exe AV only on first print after boot | Spooler service not yet warm; race with Printit startup | Add 30 s delay before first runtime print action | Apply V7.4 SP1 Update 18 |
| Printit.exe AV intermittent, correlates with NIC | Network printer drop / TCP retry storms | Switch to local printer for diagnosis | Update printer driver; escalate to Siemens support |
Hardware Considerations for Print-Intensive Projects
Although the Printit.exe fault is software-triggered, the hardware envelope determines whether the fault manifests:
- RAM: WinCC V7.4 SP1 on Windows 7/10 64-bit should have at least 4 GB of physical RAM reserved for the WinCC station; 8 GB is preferred for print-intensive tag logging projects.
- Disk: Pagefile on a separate spindle (or separate SSD partition) reduces working-set churn during large spool jobs. Recommended initial size = 1.5 × physical RAM.
- CPU: Modern SIMATIC IPC227G, IPC277G or IPC547G provide the headroom for Printit.exe to spool without crossing the time slice of a single print job.
- Printer driver: Use the manufacturer's signed driver; generic Windows text-only drivers can avoid the access-violation path entirely for legacy tag logging projects.
FAQ
Does WinCC publish a hard limit for tags per print job?
No. There is no documented hard cap; the practical limit is the contiguous virtual address space available to Printit.exe. On 32-bit WinCC V6.0 SP4 with 1 GB RAM the practical ceiling is around 120–200 tags per job, depending on row count. Reduce the tag count per job, or upgrade to WinCC V7.4 SP1 with Update 9 or later where Printit.exe stability improvements are explicitly listed.
Why does renaming the printer to ≤ 50 characters fix the access violation?
Printit.exe and PrtScr.exe allocate a fixed buffer for the Windows DEVNAMES printer display name. When that name exceeds 50 characters the buffer overflows during initialization, corrupting adjacent heap memory and producing the 0xC0000005 access violation later in the print job. Siemens explicitly documents this as fixed in WinCC V7.4 SP1 Update 9.
Can I stay on WinCC V6.0 SP4 and still fix the Printit.exe fault?
No dedicated hotfix was published for V6.0 SP4 in the readme trail. The first explicit Printit.exe stability fix is in WinCC V7.4 SP1 Update 9. Plan a project migration to V7.4 SP1 and apply at least Update 9; Update 18 carries the same fix on a newer maintenance baseline and is the recommended target for new deployments.
What is the difference between Printit.exe and PrtScr.exe?
Printit.exe is the runtime tag-logging report spooler that prints archive tables to the configured Windows printer. PrtScr.exe is the WinCC screen-print helper triggered by the on-screen Print Screen action. Both share the same printer-name parsing code path, which is why a long printer display name can fault either module, and why Siemens readme entries for V7.4 SP1 Update 18 always reference both binaries together.
How do I capture the right log files when escalating to Siemens support?
Stop the WinCC Runtime, archive the entire ..\wincc\diagnose\ folder, export the Windows Application event log as .evtx, run msinfo32 /report for hardware inventory, enable the Microsoft-Windows-PrintService/Operational log, and reproduce the fault once while capturing the access-violation dialog text verbatim. Attach all of the above to your support request at Siemens Industry Online Support.