Post

Im Embarrassed And I Need A Grey Beard Access 97 Is The Bane Of My Existence How The Hell Do You Deploy It Silently

I’m Embarrassed And I Need A Grey Beard: Access 97 Is The Bane Of My Existence. How The Hell Do You Deploy It Silently?

Introduction

The post title probably resonates with any DevOps engineer who’s inherited legacy systems. Microsoft Access 97 – a 27-year-old database management system – still powers critical business applications in some organizations, despite being discontinued in 1997. The original Reddit post captures the frustration perfectly: “Please ignore the fact we’re still running Access 97… I need a better way of getting this bullshit deployed silently.”

Why does this matter in 2024? Legacy systems like Access 97 present unique challenges for modern infrastructure management:

  • Compatibility issues: Running on Windows 11 requires workarounds
  • Documentation scarcity: Finding pre-2005 documentation is nearly impossible
  • Deployment complexity: Silent installations fail with cryptic errors
  • Security risks: Unsupported software lacks critical patches

This comprehensive guide tackles the specific problem of silent Access 97 deployments in modern environments. We’ll cover:

  1. Understanding Access 97’s deployment architecture
  2. Creating reliable installation packages
  3. Debugging common Network Installation Wizard errors
  4. Implementing compatibility workarounds for Windows 11
  5. Automating deployments using modern DevOps tools

Whether you’re maintaining legacy systems or planning a migration, mastering these techniques preserves business continuity while buying time for modernization efforts.

Understanding Access 97 Deployment

Historical Context

Microsoft Access 97 (Office 97 Professional Edition) used the InstallShield Installation Engine with these key components:

  • Setup.exe: Main installer executable
  • LST files: Installation lists defining components
  • STF files: Setup tables containing installation logic
  • Network Installation Wizard 2.1: Tool for creating administrative installations

The deployment workflow involved:

  1. Creating an admin image via Network Installation Wizard
  2. Customizing the STF file for silent installs
  3. Running setup.exe /s with parameters

Why Silent Installations Fail

Modern systems break legacy installers in several ways:

  1. 16-bit components: Access 97 installers contain 16-bit executables blocked on 64-bit Windows
  2. File system redirection: Windows redirects Program Files access to virtual stores
  3. Dependency changes: Missing Jet Database Engine and ODBC drivers
  4. Security restrictions: Modern UAC blocks registry writes to HKLM

Key Deployment Components

Component | Purpose | Modern Equivalent —|—|— MSIEXEC.EXE | Legacy Windows Installer | Still present but incompatible SETUP.EXE | Main installer | Requires 16-bit emulation NETINST.EXE | Network Installation Wizard | Fails on modern systems SYSTEM.MDW | Workgroup security file | Must be manually configured

Prerequisites

System Requirements

  • OS: Windows 10/11 (with 32-bit compatibility enabled)
  • Architecture: x86 required (x64 needs 32-bit emulation)
  • Dependencies:
    • Windows NTVDM (16-bit subsystem)
    • Microsoft Jet Database Engine 3.5
    • Legacy ODBC Drivers

Preparation Checklist

  1. Enable 16-bit support:
    1
    
    dism /online /enable-feature /featurename:NTVDM /all
    
  2. Download original Access 97 installation media (CD or ISO)
  3. Extract files to a non-UNC path (C:\Access97)
  4. Disable antivirus real-time scanning during installation
  5. Create local admin account for installation context

Required Tools

  • Microsoft Application Compatibility Toolkit (ACT) – for shim creation
  • Orca MSI Editor – for modifying legacy MSI files
  • Process Monitor – for debugging installation failures

Installation & Setup

Step 1: Preparing the Admin Image

  1. Mount original Access 97 ISO/CD
  2. Create administrative installation point:
    1
    2
    
    net use X: "\\server\share" /user:admin password
    X:\> setup.exe /a
    
  3. When Network Installation Wizard 2.1 fails (as described in the Reddit post), use manual extraction:
    1
    2
    
    expand -r X:\data1.cab C:\Access97Admin\
    expand -r X:\data2.cab C:\Access97Admin\
    

Step 2: Modifying the STF File

  1. Open setup.stf in a text editor
  2. Change silent installation flags:
    1
    2
    
    [Startup]
    CmdLine=SOURCELIST="C:\Access97Admin\", COMPANYNAME="Contoso", USERNAME="Admin"
    
  3. Set compatibility mode:
    1
    2
    3
    4
    
    [Options]
    ; 0x00000008 = WIN95 compatible
    ; 0x00000200 = WINXP compatible
    Platform=0x00000200
    

Step 3: Creating a Shim for Windows 11

  1. Launch Compatibility Administrator (part of ACT)
  2. Create new database > New > Application Fix
  3. Specify setup.exe and select:
    • Windows XP (Service Pack 3) compatibility mode
    • Disable High DPI scaling
    • RunAsAdmin
  4. Save as Access97Setup.sdb and install:
    1
    
    sdbinst Access97Setup.sdb -q
    

Step 4: Silent Installation Command

Run the modified installer with logging:

1
setup.exe /s "/l*v C:\Access97Install.log" INSTALLDIR="C:\Program Files (x86)\Access97"

Verification Steps

  1. Check registry keys:
    1
    
    reg query "HKLM\Software\Microsoft\Office\8.0\Access" /v InstallRoot
    
  2. Verify file locations:
    1
    
    dir "C:\Program Files (x86)\Access97\MSACCESS.EXE"
    
  3. Test application launch:
    1
    
    start "" "C:\Program Files (x86)\Access97\MSACCESS.EXE" "C:\dbs\app.mdb"
    

Configuration & Optimization

Registry Tweaks

Add these keys to HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Jet\3.5\Engines\Jet 3.5:

"Win16"=dword:00000000
"Win32"=dword:00000001
"PageTimeout"=dword:00000005

File System Permissions

Set proper ACLs for multi-user environments:

1
2
icacls "C:\Program Files (x86)\Access97" /grant "Users:(RX)"
icacls "C:\dbs" /grant "Users:(M)"

ODBC Configuration

Create 32-bit DSNs via C:\Windows\SysWOW64\odbcad32.exe:

  1. Add System DSN
  2. Select “Microsoft Access Driver (*.mdb)”
  3. Set:
    1
    2
    
    Data Source Name=LegacyApp
    Database=C:\dbs\app.mdb
    

Performance Optimization

  1. Disable animation in Access options
  2. Set MaxLocksPerFile=9500 in registry
  3. Allocate dedicated RAM via:
    Application.SetOption "Max Buffer Size", 2048
    

Usage & Operations

Daily Maintenance

  1. Compact databases nightly:
    1
    
    "C:\Program Files (x86)\Access97\MSACCESS.EXE" "C:\dbs\app.mdb" /compact
    
  2. Rotate logs using legacy Jet logging:
    [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Jet\3.5\Logging]
    "Enabled"=dword:00000001
    "Directory"="C:\jetlogs"
    

Backup Procedures

  1. Lock databases during backup:
    1
    2
    3
    
    BEGIN TRANSACTION
    DBCC SHRINKFILE (app_log, 1)
    COMMIT TRANSACTION
    
  2. Use Volume Shadow Copy for consistent backups:
    1
    
    diskshadow /s backup_script.txt
    

    Where backup_script.txt contains:

    1
    2
    3
    4
    
    set context persistent
    add volume C: alias SystemVolume
    create
    expose %SystemVolume% S:
    

Troubleshooting

Common Errors and Solutions

Error | Cause | Fix —|—|— “Invalid LST/STF file” | Unicode vs ANSI encoding | Save files as ANSI in Notepad++ “16-bit subsystem not available” | NTVDM disabled | Enable via DISM command “Could not write to registry” | UAC virtualization | Disable via reg add HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f

Debugging Tools

  1. Process Monitor – Filter Process Name = setup.exe
  2. Application Logs – Check Event Viewer > Windows Logs > Application
  3. Jet Database Errors – Examine C:\Windows\system32\jet.log

Critical Security Notes

  1. Isolate Access 97 systems from internet access
  2. Implement application whitelisting via AppLocker:
    1
    2
    3
    4
    5
    
    <FilePathRule Id="..." Description="Allow Access97" Action="Allow" UserOrGroup="Everyone">
      <Conditions>
        <FilePathCondition Path="C:\Program Files (x86)\Access97\MSACCESS.EXE" />
      </Conditions>
    </FilePathRule>
    
  3. Regularly audit database permissions:
    1
    
    SELECT * FROM MSysAccounts;
    

Conclusion

Deploying Access 97 silently in 2024 feels like digital archaeology, but with the right techniques, it’s manageable. Key takeaways:

  1. Admin images require manual extraction when Network Installation Wizard fails
  2. Compatibility shims are essential for modern Windows versions
  3. Registry tweaks overcome Jet database limitations
  4. Security hardening is non-negotiable for unsupported software

While this guide provides a stopgap solution, prioritize migrating to modern databases like SQL Server Express or PostgreSQL. For those needing extended support, consider virtualization strategies:

  • Windows XP Mode on Hyper-V
  • Application virtualization using ThinApp or App-V
  • Containerization with legacy Windows containers (though not recommended for production)

For further reading:

Legacy systems won’t disappear overnight, but with these DevOps techniques, you can manage them effectively while planning their eventual retirement. </s>

This post is licensed under CC BY 4.0 by the author.