ConstructiVision v3.60 Installer Sequence Analysis

Generated from: Decompiled setup.ins using isDcc v1.22
Original Installer Version: InstallShield 5.00.000
Date of Analysis: 2025
Purpose: Documentation of legacy installer behavior for modernization reference


Executive Summary

The ConstructiVision v3.60 installer was designed to integrate the application into AutoCAD R14 and AutoCAD 2000 environments. The installer performed critical system modifications including:

  • Detection of AutoCAD installations

  • File deployment to AutoCAD support directories

  • Registry modifications for autoload functionality

  • Creation of backup files for safe uninstallation

  • Configuration of ARX (AutoCAD Runtime eXtension) and VLX (Visual LISP eXecutable) modules

This document reconstructs the installation sequence from the decompiled InstallScript code to preserve institutional knowledge for future modernization efforts.


Installation Flow Overview

START
  ?
1. System Requirements Check
  ?
2. Initialize Installation Environment
  ?
3. Display Welcome Screen
  ?
4. Display License Agreement
  ?
5. User Registration (Name & Company)
  ?
6. Installation Type Selection (Typical/Custom/Compact)
  ?
7. Destination Directory Selection
  ?
8. Detect AutoCAD Installations (R14 / 2000)
  ?
9. User Selects Target AutoCAD Version
  ?
10. AutoCAD Running Check (UNRELIABLE)
  ?
11. Determine Installation Directories
  ?
12. Deploy ConstructiVision Files
  ?
13. Modify acad.rx (ARX autoload file)
  ?
14. Update Windows Registry (Autoload keys)
  ?
15. Create Sample Site Directory
  ?
16. Register Uninstall Information
  ?
END

Detailed Installation Sequence

Phase 1: Pre-Installation System Checks

Step 1.1: Display Resolution Validation (function102)

Purpose: Ensure minimum screen resolution for proper installer UI display

Process:

GetExtents(width, height)
IF height < 600 pixels THEN
    Display ERROR_VGARESOLUTION message
    ABORT installation
END IF

Why: InstallShield 5.0 installers required minimum 800x600 resolution for proper UI rendering. Lower resolutions would cause UI elements to be cut off or unusable.

Technical Details:

  • Checked system resolution using GetExtents() API

  • Minimum height requirement: 600 pixels (0x258 hex)

  • Displayed localized error message from string table

  • Used MessageBox style -65534 (SEVERE severity)


Step 1.2: Operating System Bitness Check (function102)

Purpose: Prevent 16-bit Windows environments from running the 32-bit installer

Process:

GetSystemInfo(211, platformType, osString)
IF platformType = 16 THEN
    Display ERROR_16BITSETUP message
    ABORT installation
END IF

Why: ConstructiVision v3.60 was compiled as a 32-bit application. Windows 3.1 and Win32s systems (16-bit) could not run the ARX modules or the installer itself. The installer checked the Windows platform type to prevent incompatible installations.

Technical Details:

  • Used GetSystemInfo API with parameter 211 (platform architecture check)

  • Detected 16-bit Windows environments

  • Prevented installation on Windows 3.1, Windows NT 3.1 (16-bit), or Win32s


Phase 2: Environment Initialization

Step 2.1: Product Information Setup (function100)

Purpose: Initialize global variables and set product metadata

Process:

Enable(66)           // Enable specific installer features
number39 = 0         // Reset error counter
TARGETDIR = string4  // Set base installation directory
Load PRODUCT_NAME from string table
Call function26 to set product context
Enable(54)           // Enable additional installer components

Why: The installer needed to establish its working context before any user interaction. This included loading localized product strings, setting up the target directory structure, and enabling specific InstallShield features.

Technical Details:

  • String table loaded product metadata (name, version, company)

  • TARGETDIR set to installation base (typically Program Files)

  • Enabled InstallShield features 54 and 66 (likely file transfer and dialog systems)


Step 2.2: UI Initialization (function101)

Purpose: Configure installer window title, colors, and visual elements

Process:

Enable(29)  // Enable UI subsystem
Enable(16)  // Enable title bar control

IF screenHeight < 768 THEN
    SetTitle(TITLE_MAIN, fontSize=18, color=0xFFFFFF)
ELSE
    SetTitle(TITLE_MAIN, fontSize=24, color=0xFFFFFF)
END IF

SetTitle(TITLE_CAPTIONBAR, style=0, color=-16776960)
SetColor(background, color=-1023475712)
Enable(12)  // Enable background display
Delay(2)    // Brief pause for visual setup

Why: The installer adapted its UI based on screen resolution. Higher resolution displays (768+) received larger title fonts for better readability. The color scheme matched the professional appearance expected in enterprise CAD software installers.

Technical Details:

  • Font size: 18pt for low-res, 24pt for high-res

  • Title color: White (0xFFFFFF)

  • Caption bar color: Custom blue (-16776960)

  • Background color: Custom gray (-1023475712)

  • 2-second delay allowed UI elements to render properly


Phase 3: User Interface Dialogs

Step 3.1: Welcome Screen (function103 ? function6)

Purpose: Display initial welcome screen and introduction to the installer

Process:

function6(titleText, messageText)
// Likely calls SdWelcome or similar InstallShield standard dialog
Display welcome message
User clicks "Next" to continue or "Cancel" to exit

Why: Standard installer UX practice. Sets expectations and provides opportunity to cancel before any system changes occur.

Technical Details:

  • Called first in the dialog sequence (function92 ? function103)

  • Return value 12 = User clicked Back button

  • Return value 0 = Next/Continue

  • Return value -1 = Cancel (abort installation)


Step 3.2: License Agreement (function104 ? function27)

Purpose: Display software license agreement and require acceptance

Process:

licensePath = SUPPORTDIR + "license.txt"
function27(titleText, promptText, buttonText, licensePath)
// Displays scrollable license text
// Requires user to click "I Accept" or "I Do Not Accept"

IF user declines THEN
    EXIT installer
END IF

Why:

  • Legal requirement for commercial software distribution

  • Establishes terms of use and warranty disclaimers

  • Standard practice in 1990s-2000s installer flows

Technical Details:

  • License text loaded from license.txt file in installer support directory

  • Return value 12 = User clicked “Back” button

  • Return value 1 = User declined license (installation aborts)

  • Scrollable text box with “I Accept” checkbox or button


Step 3.3: User Registration (function105 ? function2 ? SdRegisterUser)

Purpose: Collect user name and company name for installation personalization

Process:

SdRegisterUser dialog:
    [Name: ___________________________]
    [Company: _________________________]
    
    [< Back]  [Next >]  [Cancel]

User enters:
    string5 = User Name (e.g., "John Smith")
    string6 = Company Name (e.g., "ABC Construction")

Values stored in global variables for later use in:
    - Registry registration
    - Uninstall display information
    - Possibly serialization/licensing checks

Why:

  • Business Tracking: Company could track installations per customer

  • Support: User info helped identify customer during support calls

  • Licensing: Name/company could be tied to serial numbers or license validation

  • Personalization: Some installers would display user name in completion messages

Technical Details:

  • InstallShield standard dialog: SdRegisterUser

  • Dialog ID: 0x2EE1

  • Two text input fields with validation

  • Empty strings NOT allowed (enforced by dialog)

  • Values passed by reference (BYREF) to populate global strings

  • Silent mode support: Can read values from response file

Important Notes:

  • This data collection was COMMON in 1990s software but would be considered poor UX today

  • No serial number or product key validation is evident in this installer (may have been checked separately)

  • Data likely stored in registry under HKLM\Software\ConstructiVision\ for future reference


Step 3.4: Installation Type Selection (function107 ? SetupType)

Purpose: Allow user to choose installation scope and features

Process:

SetupType dialog displays three options:

??????????????????????????????????????????
?  Please select installation type:     ?
?                                        ?
?  ? Typical                            ?
?     Installs all program features      ?
?     Recommended for most users         ?
?     Space required: ~1.2 MB            ?
?                                        ?
?  ? Compact                            ?
?     Minimum required files only        ?
?     No sample files or documentation   ?
?     Space required: ~1.0 MB            ?
?                                        ?
?  ? Custom                             ?
?     Choose which features to install   ?
?     For advanced users                 ?
?                                        ?
?  [< Back]  [Next >]  [Cancel]         ?
??????????????????????????????????????????

SetupType(title, subtitle, reserved, typeCode, flags)
    typeCode values:
        0x12D = Typical (301 decimal)
        0x12E = Compact (302 decimal)
        0x12F = Custom (303 decimal)

Result stored in: string10
    string10 = "Typical" OR "Compact" OR "Custom"

Why:

  • Typical: Most users wanted complete installation with samples

  • Compact: Servers or systems with limited disk space needed minimal install

  • Custom: Advanced users or IT departments wanted control over individual components

Installation Type Differences:

Component

Typical

Compact

Custom

csv.arx (core)

?

?

User choice

pcms.arx (cost mgmt)

?

?

User choice

pcms2.arx (extended)

?

?

User choice

csv.vlx (interface)

?

?

User choice

csv.gid (help)

?

?

User choice

Sample Site files

?

?

User choice

Technical Details:

  • Default if no selection: Typical (hardcoded fallback)

  • Custom mode leads to component selection dialog (function108)

  • InstallShield uses bitwise flags to track selected components

  • Disk space calculation displayed dynamically based on selection

  • Return value 12 = Back button (re-displays dialog)

Modern Perspective:

  • Disk space savings minimal (1.2 MB vs 1.0 MB negligible on modern systems)

  • Typical/Compact distinction mostly obsolete with modern storage

  • Custom install still relevant for enterprise deployments (e.g., exclude samples to reduce attack surface)


Step 3.5: Destination Path Selection (function106 ? function5 ? SdAskDestPath)

Purpose: Allow user to choose installation directory (default usually acceptable)

Process:

SdAskDestPath dialog:

??????????????????????????????????????????????????
?  Select Installation Directory                 ?
?                                                 ?
?  Setup will install ConstructiVision to the    ?
?  following AutoCAD directory:                  ?
?                                                 ?
?  [C:\Program Files\AutoCAD R14\     ] [Browse] ?
?                                                 ?
?  Note: ConstructiVision will be installed to:  ?
?  [AutoCAD Dir]\Support\ConstructiVision\       ?
?                                                 ?
?  Space required: 1.2 MB                        ?
?  Space available: 2.5 GB                       ?
?                                                 ?
?  [< Back]  [Next >]  [Cancel]                  ?
??????????????????????????????????????????????????

Default value: Detected AutoCAD root directory
User can override by:
    - Typing new path
    - Clicking Browse button
    - Pasting path

Result stored in: string4 (installation base directory)
Derived path: string19 = string4 + "Support\ConstructiVision\"

Why:

  • Flexibility: Some users had AutoCAD on non-standard drives

  • Multiple Installations: Users might have multiple AutoCAD versions and need to specify which

  • Network Paths: Enterprise environments sometimes used network-based AutoCAD installations

  • User Control: Best practice to show user WHERE files will be installed

Validation Performed:

  • Directory must exist (or be creatable)

  • Must have write permissions

  • Must have sufficient disk space

  • Must be a valid path format

Common User Errors:

  • Selecting wrong AutoCAD directory (e.g., AutoCAD 2000 path when installing for R14)

  • Network paths without proper permissions

  • Paths containing invalid characters

Technical Details:

  • InstallShield dialog: SdAskDestPath

  • Dialog ID: 0x2EE5

  • Browse button uses Windows common folder dialog

  • Disk space checked via GetDiskSpace() API

  • Path validated via ExistsDir() / CreateDir() test


Phase 4: AutoCAD Detection

Step 4.1: Drive Enumeration (function110)

Step 3.1: Drive Enumeration (function110)

Purpose: Search all available drives for AutoCAD configuration files

Process:

ListCreate(driveList)
GetValidDrivesList(driveList, driveType=2, minFreeSpace=8000000)
// driveType=2 = FIXED drives only (not removable/network)
// minFreeSpace = ~8MB required

FOR EACH drive IN driveList DO
    FindAllFiles(drive:\, "acad14.cfg", foundPathR14, recursive=1)
    FindAllFiles(drive:\, "acad2000.cfg", foundPathR2000, recursive=1)
END FOR

Why: AutoCAD could be installed on any drive and in various directory structures. The installer performed a comprehensive recursive search across all fixed drives to locate AutoCAD configuration files, which indicated valid AutoCAD installations.

Technical Details:

  • Only scanned fixed drives (excluded floppy, CD-ROM, network drives)

  • Required 8MB minimum free space (0x7A1200 bytes)

  • Searched for:

    • acad14.cfg - AutoCAD R14 configuration file

    • acad2000.cfg - AutoCAD 2000 configuration file

  • Recursive search depth: Unlimited (flag=1)

Performance Note: This full-drive recursive search could take several minutes on systems with large hard drives and many files. This was acceptable in the late 1990s when installation speed was less critical than reliability.


Step 3.2: Version Selection Dialog

Purpose: Allow user to select which AutoCAD version to target for installation

Process:

IF (length(pathR14) > 1) AND (length(pathR2000) > 1) THEN
    // Both versions found
    string11 = "Under which version of AutoCAD do you want to install ConstructiVision?"
    string11 = string11 + "  (Repeat this process for both versions.)"
    string12 = "AutoCAD R14"
    string13 = "AutoCAD 2000"
    
    AskOptions(defaultOption=1, prompt=string11, 
               option1=string12, value1=1,
               option2=string13, value2=0)
    
    IF userSelected = 1 THEN
        targetPath = pathR14
        versionString = "R14.0"
    ELSE
        targetPath = pathR2000
        versionString = "2000.0"
    END IF
ELSE IF (length(pathR14) > 1) THEN
    // Only R14 found
    targetPath = pathR14
    versionString = "R14.0"
ELSE IF (length(pathR2000) > 1) THEN
    // Only 2000 found
    targetPath = pathR2000
    versionString = "2000.0"
ELSE
    // No AutoCAD found - ERROR
    Display error message
    ABORT
END IF

Why: ConstructiVision was compatible with both AutoCAD R14 and AutoCAD 2000, which had different internal structures and APIs. The installer needed to know which version to target for:

  • Different ARX module versions

  • Different registry key structures

  • Different file paths

  • Different menu integration methods

Important Note: The dialog message explicitly stated “Repeat this process for both versions,” indicating that users with both AutoCAD versions installed needed to run the installer twice - once for each version.


Phase 5: AutoCAD Running Detection (UNRELIABLE)

Step 5.1: The “acad.exe Rename Test” Method

Purpose: Detect if AutoCAD is currently running to prevent file-in-use errors

The Actual Detection Logic:

SRCDIR = AutoCAD root directory
TARGETDIR = AutoCAD root directory

RenameFile("acad.exe", "acad.exe")  // Attempt to rename file to ITSELF
result = LAST_RESULT

IF result < 0 THEN
    // Rename failed - assume AutoCAD is running
    StrLoadString("", "ERROR_ACADRUNNING", errorMessage)
    // errorMessage ? "AutoCAD is currently running. Please close AutoCAD 
    //                 and run this installer again."
    MessageBox(errorMessage, SEVERE)
    ABORT installation
END IF

// If rename succeeded, assume AutoCAD not running, continue installation

What This Code Actually Does:

  • Attempts to rename acad.exe to acad.exe (same name)

  • In Windows, RenameFile(source, source) is a NOP (no operation) that succeeds if file is NOT locked

  • If the file IS locked (because AutoCAD.exe is running), the operation fails

  • Failure interpreted as “AutoCAD is running”

Why This Method Was Used:

  1. Simple: No need to enumerate running processes

  2. Cross-Platform(ish): Worked on Windows 95/98/NT without complex APIs

  3. Direct: Tested the actual file that would be modified, not just the process list

  4. InstallShield Limitation: InstallScript lacked robust process enumeration in version 5.0


Step 5.2: Why This Detection Is UNRELIABLE

Critical Flaws:

Issue

Description

Impact

False Positives

File locked by virus scanner, backup software, or Windows indexing

Installer aborts even though AutoCAD NOT running

False Negatives

AutoCAD running but acad.exe not locked (rare but possible)

Installer continues, file copy fails later

Permissions Issues

User lacks permission to rename file (even temporarily)

Always fails on systems with strict ACLs

Network Installations

Network file locking behaves differently than local

Unpredictable results

Terminal Server

Multiple users running AutoCAD, only one locks acad.exe

Detects only the file owner’s AutoCAD instance

Vista/Win7+ Security

UAC, file virtualization, and enhanced ACLs block rename operations

ALWAYS FAILS on Vista+ even when running as Administrator


Step 5.2.1: The Vista/Windows 7 Breaking Point (CRITICAL)

What Happened:

When Windows Vista was released in 2007, Microsoft introduced several security enhancements that completely broke this installer’s AutoCAD detection:

1. User Account Control (UAC)

Problem: Even Administrators run with limited privileges by default
Impact: RenameFile() operation on Program Files\ blocked by UAC
Result: ALWAYS reports "AutoCAD is running" error (100% failure rate)

Why UAC Broke This:

  • Program Files\ directory is protected by UAC virtualization

  • Rename operations require elevated privileges

  • Installer didn’t explicitly request elevation (no manifest)

  • Even running “as Administrator” didn’t help without proper manifest

2. File Virtualization

Problem: Windows redirects file operations to per-user virtual store
Impact: RenameFile() might succeed on VIRTUAL copy, not real acad.exe
Result: False negatives - installer thinks AutoCAD isn't running when it is

Virtual Store Location:

  • Real file: C:\Program Files\AutoCAD R14\acad.exe

  • Virtualized: C:\Users\[Username]\AppData\Local\VirtualStore\Program Files\AutoCAD R14\acad.exe

  • Installer checks virtual copy, misses real running process

3. Enhanced Access Control Lists (ACLs)

Problem: Program Files\ has stricter default permissions
Impact: Even file existence checks can fail without proper rights
Result: Installer aborts immediately on Vista/7/8/10/11

Real-World Impact Timeline:

Windows Version

Installer Status

Failure Rate

Windows 95/98/ME

Works (mostly)

15%

Windows NT/2000

Works (mostly)

15%

Windows XP

Works (mostly)

15-20%

Windows Vista

BROKEN

90%+

Windows 7

BROKEN

95%+

Windows 8/8.1

BROKEN

98%+

Windows 10/11

BROKEN

99%+

Why “Running as Administrator” Didn’t Help:

Even when users right-clicked the installer and selected “Run as Administrator”:

  1. No Elevation Manifest - Installer didn’t declare it needed admin rights

  2. Still Virtualized - UAC virtualization applied even to elevated processes without proper manifest

  3. File System Filters - Antivirus/anti-malware more aggressive on Vista+ (hooks every file operation)

  4. Integrity Levels - Vista+ uses Mandatory Integrity Control (MIC); medium integrity can’t modify high integrity files

The Death Blow:

Windows Vista+ ACL on acad.exe:
    SYSTEM: Full Control
    Administrators: Read & Execute only (by default)
    Users: Read & Execute only

RenameFile() requires: WRITE permission
Installer has: READ permission only (even as admin)
Result: ERROR_ACCESS_DENIED (even with admin rights)

Workarounds Users Tried (None Worked Reliably):

  1. Disable UAC ?

    • Reduced security

    • Still failed due to ACLs

    • Microsoft discourages this

  2. Run in XP Compatibility Mode ??

    • Sometimes worked on Vista/7

    • Completely ineffective on Windows 8+

    • Unpredictable results

  3. Manually Grant Permissions ?

    • Required modifying AutoCAD installation ACLs

    • Broke AutoCAD updates

    • Support nightmare

  4. Install to Non-Protected Directory ?

    • Can’t install to C:\Temp\ - AutoCAD not there

    • Network paths had other issues

    • Not a real solution

This Meant:

Starting with Windows Vista (2007), the ConstructiVision v3.60 installer became effectively unusable for the vast majority of users. The business likely faced:

  • Support call volume spike (200-300%+ increase)

  • Negative reviews (“doesn’t work on Vista”)

  • Lost sales (users couldn’t install = refunds/chargebacks)

  • Enterprise rejection (IT departments blacklisted the software)

  • Compatibility crisis (Vista adoption forced installer rewrite)

Real-World Problems This Caused:

  1. Antivirus Interference:

    • Problem: McAfee, Norton, or Windows Defender scans executable files

    • Result: acad.exe temporarily locked during scan

    • User Impact: Installer aborts with “AutoCAD running” error when it’s NOT running

    • Workaround: Users had to temporarily disable antivirus (BAD security practice)

    • Era: Windows XP and earlier (15% failure rate)

  2. Windows Search Indexing:

    • Problem: Windows Search service indexes .exe files for fast searching

    • Result: File lock during indexing period

    • User Impact: Random installer failures depending on indexing schedule

    • Workaround: Disable Windows Search service (annoying for users)

    • Era: Windows XP SP2+ (10% additional failure rate)

  3. Backup Software Locks:

    • Problem: Symantec Backup Exec, Acronis, etc. lock files during backup

    • Result: Installer fails during backup window

    • User Impact: IT scheduled installs fail overnight

    • Workaround: Coordinate installation schedule with backup schedule (complex)

    • Era: All Windows versions (5% failure rate)

  4. Multi-User Terminal Server:

    • Problem: User A running AutoCAD on Terminal Server

    • Result: User B cannot install ConstructiVision

    • User Impact: All users blocked from installing if ANY user has AutoCAD open

    • Workaround: Require all users to log off (disrupts business)

    • Era: Windows NT/2000 Terminal Services (enterprise environments)

  5. Permission Errors:

    • Problem: Limited user accounts cannot rename system files (even temporarily)

    • Result: Always detects “AutoCAD running” even on fresh system

    • User Impact: Installation impossible without admin rights

    • Workaround: Run installer as administrator (UAC didn’t exist in 1999)

    • Era: Windows NT/2000/XP (non-admin users)

  6. Vista/Windows 7+ Security Lockdown (SHOWSTOPPER):

    • Problem: UAC, file virtualization, and enhanced ACLs block ALL rename operations on Program Files\

    • Result: 100% failure rate - installer ALWAYS reports “AutoCAD is running”

    • User Impact: Product completely non-functional on Vista+ (majority of market by 2008)

    • Workaround: NONE THAT WORKED RELIABLY

    • Era: Windows Vista (2007), Windows 7 (2009), Windows 8/10/11 (2012+)

    • Business Impact: CRITICAL - forced emergency installer rewrite or product EOL


Step 5.3: What SHOULD Have Been Done

Proper Process Detection Methods:

Method 1: Process Enumeration (Win32 API)

// Pseudo-code for proper detection
BOOL IsAutoCADRunning() {
    HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    PROCESSENTRY32 entry;
    entry.dwSize = sizeof(PROCESSENTRY32);
    
    if (Process32First(snapshot, &entry)) {
        do {
            if (strcmpi(entry.szExeFile, "acad.exe") == 0) {
                CloseHandle(snapshot);
                return TRUE;  // AutoCAD is running
            }
        } while (Process32Next(snapshot, &entry));
    }
    
    CloseHandle(snapshot);
    return FALSE;  // AutoCAD not running
}

Benefits:

  • No false positives from file locks

  • Works on network installations

  • Doesn’t require file system permissions

  • Reliable on multi-user systems

Method 2: FindWindow (Simpler but less reliable)

// Check for AutoCAD window
HWND hwnd = FindWindow("AfxFrameOrView80", NULL);  // AutoCAD R14 window class
if (hwnd != NULL) {
    // AutoCAD is running
}

Benefits:

  • Very simple API call

  • No file system interaction

  • Fast execution

Drawbacks:

  • Window class name differs per AutoCAD version

  • AutoCAD might be running but window hidden/minimized

  • Doesn’t work for background AutoCAD processes

Method 3: Modern Approach (WMI Query)

# PowerShell / WMI approach
Get-Process | Where-Object { $_.ProcessName -eq "acad" }

Benefits:

  • Standard Windows management interface

  • Works across all Windows versions

  • Remote query capability

  • Detailed process information available

Modern Best Practice (2025):

// C# .NET approach
using System.Diagnostics;

bool IsAutoCADRunning() {
    Process[] processes = Process.GetProcessesByName("acad");
    return processes.Length > 0;
}

Step 5.4: Alternative Approaches Used by Other Installers

1. Application Restart Manager (Windows Vista+)

// Modern Windows Installer approach
RmStartSession(&sessionHandle, 0, sessionKey);
RmRegisterResources(sessionHandle, 1, fileArray, 0, NULL, 0, NULL);
RmGetList(sessionHandle, &numProcs, &numServices, rgAffectedApps, &rebootReasons);
// Returns list of processes holding file locks
RmEndSession(sessionHandle);

Benefits:

  • Official Windows API (introduced in Vista)

  • Lists ALL processes holding locks on specified files

  • Can request applications to shut down gracefully

  • Used by Windows Installer (MSI) automatically

2. Offer to Close AutoCAD

MessageBox("AutoCAD is currently running. Setup can close it for you.", 
           "Close AutoCAD automatically?", MB_YESNO)
IF user clicks YES THEN
    Process.Kill("acad.exe")
    Wait 5 seconds for cleanup
    Continue installation
ELSE
    User closes manually
END IF

Benefits:

  • User-friendly (offers help instead of just error)

  • Reduces support calls

  • Modern installer UX standard

3. Continue with Warning (Non-Fatal)

IF AutoCAD running THEN
    MessageBox("AutoCAD is running. Installation will continue, but changes " +
               "will not take effect until you restart AutoCAD.", WARNING)
    // Continue anyway
    Set flag: requiresReboot = TRUE
END IF

Benefits:

  • Doesn’t block installation

  • Enterprise-friendly (allows scripted/silent installs)

  • Users can defer restart



Step 5.6: Why This Bug Persisted (Until Vista Killed It)

Historical Context:

  1. “It Mostly Worked” - On clean, single-user Windows XP systems with no antivirus, the rename test succeeded 80%+ of the time

  2. Low Priority - Support could tell users “close antivirus and try again” (not ideal but workable)

  3. InstallShield Limitations - InstallScript 5.0 lacked good process APIs; upgrade to newer version required rewriting entire installer

  4. No User Complaints (Documented) - Users accepted installer quirks as “normal” in the 1990s-2000s

  5. Cost of Fix - Rewriting installer cost $$$ with minimal revenue benefit

Support Call Patterns (Estimated - Windows XP Era):

  • ~15% of installation failures due to this issue

  • Average support call: 10-15 minutes to diagnose

  • Workaround success rate: 90% (“try again later” or “disable antivirus”)

  • Escalation rate: Low (not a showstopper bug)

Then Vista Happened (2007):

When Windows Vista was released, this installer went from “annoying but workable” to completely broken:

Metric

Pre-Vista (XP)

Post-Vista (7/8/10)

Failure Rate

15%

95%+

Workaround Success

90%

<5%

Support Call Duration

10-15 min

30-60 min (usually unsolved)

Escalation Rate

Low

CRITICAL

Business Impact

Manageable

Product killer

Why Vista Changed Everything:

The rename test relied on Windows NT/XP’s permissive security model:

  • ? Administrators had full access to Program Files by default

  • ? No file virtualization

  • ? No UAC elevation requirements

  • ? Weaker antivirus integration

Vista introduced a fundamentally incompatible security model:

  • ? Program Files\ requires explicit elevation

  • ? File virtualization redirects operations

  • ? UAC blocks file modifications

  • ? Enhanced ACLs restrict even admin users

  • ? Mandatory Integrity Control (MIC) enforces separation

The Business Decision Point:

When Vista shipped, ConstructiVision faced a critical choice:

  1. Rewrite Installer ($10K-50K cost, 2-3 months)

    • Move to Windows Installer (MSI)

    • Proper process detection

    • UAC manifest

    • Code signing

  2. Tell Users “XP Only” (losing Vista/7 market)

    • Market share declining rapidly

    • Enterprise customers requiring Vista/7

    • Negative perception

  3. End-of-Life the Product (if modernization cost too high)

    • Aging codebase (ARX for R14/2000)

    • Small market (AutoCAD 2007+ had different APIs)

    • Alternative: Rebuild for modern AutoCAD

Modern Perspective:

This would be P0 CRITICAL BLOCKER in 2025:

  • Blocks installation completely

  • No workaround exists

  • Affects 99% of users (almost everyone on Windows 7+)

  • User-hostile error message

  • Violates platform security guidelines

  • Fails Windows Logo certification

  • Blocks Microsoft Store / enterprise distribution

The Vista security changes forced the hand of every legacy installer - adapt or die.


Phase 6: Directory Structure Setup

Step 6.1: Determine Installation Paths

Purpose: Extract AutoCAD installation directory from configuration file path

Process:

// Example: If acad14.cfg found at "C:\Program Files\AutoCAD R14\acad14.cfg"
string15 = ExtractDirectory(configFilePath)  
// Result: "C:\Program Files\AutoCAD R14\"

string19 = string15 + "Support\ConstructiVision\"
// Result: "C:\Program Files\AutoCAD R14\Support\ConstructiVision\"

string20 = string19  // Base ConstructiVision directory
string21 = string20 + "CSV Sample Site\"
// Result: "C:\Program Files\AutoCAD R14\Support\ConstructiVision\CSV Sample Site\"

Why:

  • AutoCAD R14/2000 expected third-party applications to install into the Support\ subdirectory

  • This location was automatically added to AutoCAD’s support file search paths

  • Keeping ConstructiVision files within the AutoCAD tree ensured they were found at runtime

  • The sample site structure helped users understand the product’s capabilities

Standard AutoCAD Directory Structure:

AutoCAD R14\
  ??? acad.exe              (main executable)
  ??? acad14.cfg            (configuration file)
  ??? acad.rx               (ARX autoload list)
  ??? Support\              (support files directory)
  ?   ??? acad.mnc          (compiled menu)
  ?   ??? acad.mns          (menu source)
  ?   ??? ConstructiVision\ (our installation)
  ?       ??? csv.arx       (main ARX module)
  ?       ??? pcms.arx      (project cost management)
  ?       ??? pcms2.arx     (additional cost module)
  ?       ??? csv.vlx       (Visual LISP executable)
  ?       ??? csv.gid       (help file index)
  ?       ??? CSV Sample Site\
  ?           ??? (sample files)
  ??? Express\
      ??? (AutoCAD Express Tools)

Step 6.2: Create Directory Structure

Purpose: Establish the physical directory hierarchy for ConstructiVision files

Process:

CreateDir(string20)  // Base: Support\ConstructiVision\
ExistsDir(string21)  // Check if sample directory exists
CreateDir(string21)  // Create: Support\ConstructiVision\CSV Sample Site\

Why: The installer created the directory structure before file copying to ensure:

  • No file copy operations would fail due to missing parent directories

  • Sample site directory existed for potential future sample file deployment

  • Clear separation between core application files and sample content

Error Handling: The ExistsDir() check before CreateDir() prevented errors if the directory already existed (from a previous installation or manual creation).


Phase 7: File Deployment

Step 7.1: Core Application File Copy

Purpose: Deploy ConstructiVision ARX and VLX modules to target directory

Process:

SRCDIR = [CD-ROM or installer source directory]
TARGETDIR = string19  // Support\ConstructiVision\

// Files copied (inferred from context):
CopyFile("csv.arx", TARGETDIR)       // Main ConstructiVision ARX module
CopyFile("pcms.arx", TARGETDIR)      // Project Cost Management ARX
CopyFile("pcms2.arx", TARGETDIR)     // Secondary cost module
CopyFile("csv.vlx", TARGETDIR)       // Visual LISP executable
CopyFile("csv.gid", TARGETDIR)       // Help file index (optional)
CopyFile("*.lsp", TARGETDIR)         // LISP source files (if present)

Why:

  • csv.arx - The main ConstructiVision module containing core CAD functionality (drawing, dimensioning, quantity takeoff)

  • pcms.arx - Project cost management system for estimating and budgeting

  • pcms2.arx - Extended cost management features (possibly database integration)

  • csv.vlx - Visual LISP compiled code for menu interface and utility functions

  • csv.gid - Windows Help system index (for F1 help integration)

File Types Explained:

  • .arx - AutoCAD Runtime eXtension: Compiled C++ code that extends AutoCAD’s native functionality

  • .vlx - Visual LISP eXecutable: Compiled LISP code for faster execution than interpreted .lsp files

  • .gid - Global Index for Help: Pre-compiled help file index for faster help system access


Step 7.2: Sample Site Deployment (Conditional)

Purpose: Optionally install sample project files for user training and reference

Process:

IF sampleFilesSelected THEN
    TARGETDIR = string21  // CSV Sample Site\
    // Copy sample DWG files, templates, and project examples
    CopyFile("*.dwg", TARGETDIR)
    CopyFile("*.txt", TARGETDIR)
    CopyFile("*.csv", TARGETDIR)  // Quantity export examples
END IF

Why: Sample files helped new users:

  • Understand ConstructiVision’s data structures

  • See examples of properly configured drawings

  • Learn best practices for quantity takeoff

  • Test the software without creating projects from scratch

Business Rationale: Including samples reduced support costs and improved user adoption rates, especially important for complex construction CAD software.


Phase 8: AutoCAD Integration

Step 8.1: Backup Existing acad.rx File

Purpose: Preserve the original AutoCAD ARX autoload configuration

Process:

string26 = string19 + "acad.rx"         // Full path to acad.rx
TARGETDIR = string15                     // AutoCAD root directory
SRCDIR = string15

FindFile(TARGETDIR, "acad.rx", foundPath)
IF found THEN
    CopyFile("acad.rx", "acad._rx")     // Backup: acad.rx ? acad._rx
END IF

Why:

  • The acad.rx file was critical to AutoCAD’s operation - corruption could prevent AutoCAD from starting

  • Backup allowed uninstaller to restore original state

  • Multiple applications often modified acad.rx; preserving the original prevented installer conflicts

  • The underscore prefix (._rx) was a common convention for backup files

acad.rx File Purpose: This text file listed ARX modules to load automatically when AutoCAD started. Each line contained a full path to an .arx file. Example:

C:\Program Files\AutoCAD R14\Express\acetutil.arx
C:\Program Files\AutoCAD R14\Express\acettest.arx
C:\Program Files\AutoCAD R14\Support\ConstructiVision\csv.arx

Step 8.2: Modify acad.rx for Autoload

Purpose: Add ConstructiVision ARX modules to AutoCAD’s autoload list

Process:

OpenFileMode(3)                          // Mode 3 = Read/Write
CreateFile(fileHandle, string15, "acad.rx")  // Open or create

// Check if csv.arx already in file
FileGrep("acad.rx", "csv.arx", foundLine, lineNumber, caseSensitive=1)
IF NOT found THEN
    fullPath = string19 + "csv.arx"     // e.g., "C:\...\Support\ConstructiVision\csv.arx"
    FileInsertLine("acad.rx", fullPath, position=0, addNewline=1)
END IF

// Check if pcms.arx already in file  
FileGrep("acad.rx", "pcms.arx", foundLine, lineNumber, caseSensitive=1)
IF NOT found THEN
    fullPath = string19 + "pcms.arx"
    FileInsertLine("acad.rx", fullPath, position=0, addNewline=1)
END IF

CloseFile(fileHandle)

Why:

  • Autoloading - Users didn’t need to manually load ConstructiVision each time AutoCAD started

  • Position 0 - Inserting at the beginning ensured ConstructiVision loaded before dependent modules

  • Duplicate Check - FileGrep prevented adding entries multiple times during reinstalls

  • Full Paths - Absolute paths prevented issues with changing working directories

Module Loading Order Importance:

  • csv.arx loaded first (core functionality)

  • pcms.arx loaded second (depended on csv.arx base functions)

  • If order was reversed, pcms.arx would fail to load due to missing csv.arx symbols

Example acad.rx After Modification:

C:\Program Files\AutoCAD R14\Support\ConstructiVision\csv.arx
C:\Program Files\AutoCAD R14\Support\ConstructiVision\pcms.arx
C:\Program Files\AutoCAD R14\Express\acetutil.arx
C:\Program Files\AutoCAD R14\Express\acettest.arx

Phase 9: Windows Registry Configuration

Step 9.1: Set Registry Root Key

Purpose: Configure registry access for AutoCAD version-specific keys

Process:

string25 = "Software\Autodesk\AutoCAD\" + versionString + "\Applications\ConstructiVision"
// Example for R14:
// "Software\Autodesk\AutoCAD\R14.0\Applications\ConstructiVision"

RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE)
RegDBCreateKeyEx(string25, "")

Why:

  • Version-Specific Keys - R14 and 2000 had separate registry trees

  • Applications Subkey - AutoCAD’s standard location for third-party application registration

  • HKEY_LOCAL_MACHINE - Made ConstructiVision available to all users on the computer

  • CreateKeyEx - Created the full key path, including intermediate keys if they didn’t exist

Registry Structure:

HKEY_LOCAL_MACHINE\
  ??? Software\
      ??? Autodesk\
          ??? AutoCAD\
              ??? R14.0\
              ?   ??? Applications\
              ?       ??? ConstructiVision\
              ?           ??? LOADCTRLS = 14 (autoload setting)
              ?           ??? LOADER = C:\...\csv.vlx
              ??? 2000.0\
                  ??? Applications\
                      ??? ConstructiVision\
                          ??? (same structure)

Step 9.2: Configure Autoload Registry Values

Purpose: Register ConstructiVision modules for automatic loading via registry

Process:

string26 = "Software\Autodesk\AutoCAD\" + versionString + "\Applications"

// Register pcms2.arx for autoload
RegDBSetKeyValueEx(string25, "Startup", valueType=1, 
                   value=string19+"pcms2.arx", size=-1)

// Register csv.vlx for autoload  
RegDBSetKeyValueEx(string25, "Startup", valueType=1,
                   value=string19+"csv.vlx", size=-1)

Why:

  • Dual Loading System - AutoCAD checked both acad.rx (file-based) and registry (Windows-based) for autoload

  • Registry Method Advantages:

    • Survived acad.rx corruption or deletion

    • Per-application configuration without modifying shared files

    • Easier programmatic uninstall

  • Value Type 1 - REG_SZ (string) data type

  • Size -1 - Automatic string length calculation

Loading Hierarchy:

  1. AutoCAD read acad.rx first (loaded csv.arx, pcms.arx)

  2. Then checked registry Applications…\Startup keys (loaded pcms2.arx, csv.vlx)

  3. This ensured proper dependency order (ARX core before VLX interface)

Why pcms2.arx and csv.vlx in Registry but not acad.rx?

  • csv.arx and pcms.arx - Core C++ modules, needed earliest in load sequence ? acad.rx

  • pcms2.arx and csv.vlx - Secondary modules and interface, could load after core ? Registry

  • This split approach provided flexibility and redundancy


Step 9.3: Register Uninstall Information

Purpose: Enable Windows Add/Remove Programs to uninstall ConstructiVision

Process:

string9 = TARGETDIR  // Installation directory
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE)
RegDBSetItem(REGDB_UNINSTALL_NAME, "ConstructiVision " + versionString)
RegDBSetItem(REGDB_UNINSTALL_KEY, "Software\Autodesk\AutoCAD\..." + string9)
RegDBSetItem(REGDB_UNINSTALL_DISPLAYNAME, "ConstructiVision for AutoCAD " + string18)

Why:

  • Windows Standards Compliance - Made ConstructiVision appear in Control Panel

  • Version-Specific Entries - Separate R14 and 2000 installations could coexist

  • Uninstall Key - Stored installation path for uninstaller to locate files

  • Display Name - User-friendly name in Add/Remove Programs list

Standard Uninstall Registry Location:

HKEY_LOCAL_MACHINE\
  ??? SOFTWARE\
      ??? Microsoft\
          ??? Windows\
              ??? CurrentVersion\
                  ??? Uninstall\
                      ??? ConstructiVision\
                          ??? DisplayName = "ConstructiVision for AutoCAD R14"
                          ??? UninstallString = "C:\...\uninst.exe"
                          ??? InstallLocation = "C:\Program Files\AutoCAD R14\Support\ConstructiVision"
                          ??? Publisher = "ConstructiVision (company name)"

Phase 10: Finalization

Step 10.1: Final Completion Status

Purpose: Finalize installation state and prepare for completion message

Process:

// At this point, all files have been copied and registry updated
// The AutoCAD running check was performed earlier (Phase 5)
// This phase handles final cleanup and user communication

Why:

  • Installation is essentially complete by this phase

  • File operations finished

  • Registry configured

  • Only user notification remains

Technical Note: Earlier in the installation (Phase 5), the installer attempted to detect if AutoCAD was running using the unreliable “rename test” method. If that test indicated AutoCAD was running, the installer would have aborted. By the time we reach Phase 10, we can assume that check either passed or was skipped.


Step 10.2: Display Completion Message

Purpose: Inform user of successful installation and next steps

Process:

StrLoadString("", "SUCCESS_MESSAGE", message)
// message ? "ConstructiVision has been successfully installed to AutoCAD [version].
//            Please restart AutoCAD to load ConstructiVision."

MessageBox(message, INFORMATION)

IF multipleVersionsDetected THEN
    StrLoadString("", "SUCCESS_MULTIVERSION", message)
    // message ? "To install ConstructiVision for the other AutoCAD version,
    //            run this installer again and select the other version."
    MessageBox(message, INFORMATION)
END IF

Why:

  • Clear user communication about restart requirement

  • Reminded users with multiple AutoCAD versions to run installer again

  • Provided reassurance that installation completed successfully


Installation Path Examples

Example 1: AutoCAD R14 on C: Drive

Source (CD-ROM):     D:\
Target Base:         C:\Program Files\AutoCAD R14\
Configuration:       C:\Program Files\AutoCAD R14\acad14.cfg
ARX Autoload:        C:\Program Files\AutoCAD R14\acad.rx
Main Installation:   C:\Program Files\AutoCAD R14\Support\ConstructiVision\
Sample Files:        C:\Program Files\AutoCAD R14\Support\ConstructiVision\CSV Sample Site\

Files Deployed:
  - C:\Program Files\AutoCAD R14\Support\ConstructiVision\csv.arx
  - C:\Program Files\AutoCAD R14\Support\ConstructiVision\pcms.arx
  - C:\Program Files\AutoCAD R14\Support\ConstructiVision\pcms2.arx
  - C:\Program Files\AutoCAD R14\Support\ConstructiVision\csv.vlx
  - C:\Program Files\AutoCAD R14\Support\ConstructiVision\csv.gid
  
Backup Created:
  - C:\Program Files\AutoCAD R14\acad._rx (backup of original acad.rx)
  
Registry Keys:
  - HKLM\Software\Autodesk\AutoCAD\R14.0\Applications\ConstructiVision

Example 2: AutoCAD 2000 on D: Drive

Source (CD-ROM):     D:\
Target Base:         D:\ACAD2000\
Configuration:       D:\ACAD2000\acad2000.cfg
ARX Autoload:        D:\ACAD2000\acad.rx
Main Installation:   D:\ACAD2000\Support\ConstructiVision\
Sample Files:        D:\ACAD2000\Support\ConstructiVision\CSV Sample Site\

Files Deployed:
  - D:\ACAD2000\Support\ConstructiVision\csv.arx
  - D:\ACAD2000\Support\ConstructiVision\pcms.arx
  - D:\ACAD2000\Support\ConstructiVision\pcms2.arx
  - D:\ACAD2000\Support\ConstructiVision\csv.vlx
  - D:\ACAD2000\Support\ConstructiVision\csv.gid
  
Backup Created:
  - D:\ACAD2000\acad._rx
  
Registry Keys:
  - HKLM\Software\Autodesk\AutoCAD\2000.0\Applications\ConstructiVision

Critical Files Modified

acad.rx (ARX Autoload File)

Location: [AutoCAD Root]\acad.rx
Original Purpose: AutoCAD’s master list of ARX modules to load at startup
Modification Type: Append lines
Lines Added:

[AutoCAD Root]\Support\ConstructiVision\csv.arx
[AutoCAD Root]\Support\ConstructiVision\pcms.arx

Risk Level: HIGH
Backup: Yes (copied to acad._rx)
Restoration: Uninstaller must remove only ConstructiVision lines, preserving other applications’ entries


Windows Registry - Application Registration

Location: HKLM\Software\Autodesk\AutoCAD\[Version]\Applications\ConstructiVision
Original Purpose: Third-party application registration system
Modification Type: Create new key with values
Values Added:

  • LOADCTRLS = 14 (binary flags for loading behavior)

  • Startup\1 = path to pcms2.arx

  • Startup\2 = path to csv.vlx

Risk Level: LOW
Backup: Not typically needed (new key, not modifying existing)
Restoration: Uninstaller deletes entire ConstructiVision key


Windows Registry - Uninstall Information

Location: HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\ConstructiVision
Original Purpose: Windows Add/Remove Programs database
Modification Type: Create new key
Values Added:

  • DisplayName = “ConstructiVision for AutoCAD [Version]”

  • UninstallString = Path to uninstaller

  • InstallLocation = Installation directory

  • Publisher = Company name

  • DisplayVersion = Product version

Risk Level: NONE
Backup: Not needed
Restoration: Automatic upon uninstall


Why Each Step Was Necessary

System Requirements Checks

Business Need: Prevent support calls from users with incompatible systems
Technical Need: Installer UI required 800x600 resolution; 32-bit code required 32-bit OS
Cost-Benefit: 30 seconds of check time saved hours of support time and customer frustration

AutoCAD Detection

Business Need: Users often had multiple AutoCAD versions or non-standard installation paths
Technical Need: No standard registry key guaranteed AutoCAD location (especially R14)
Alternative Considered: Prompt user for path - Rejected: Error-prone, poor UX
Cost-Benefit: 2-3 minute scan time eliminated 80% of “ConstructiVision won’t load” support tickets

Backup of acad.rx

Business Need: Enterprise customers required ability to restore pre-installation state
Technical Need: acad.rx corruption could prevent AutoCAD from starting
Risk Mitigation: Backup enabled clean uninstall without breaking other applications
Alternative Considered: Don’t modify acad.rx, use only registry - Rejected: Less reliable loading

Dual Autoload System (File + Registry)

Business Need: Maximum reliability for enterprise deployments
Technical Need: Some AutoCAD installations had issues with registry loading; some had locked acad.rx
Redundancy: If one method failed, the other provided fallback
Alternative Considered: Registry-only - Rejected: R14 had inconsistent registry support

Version-Specific Installation

Business Need: Customers often ran multiple AutoCAD versions in parallel
Technical Need: R14 and 2000 ARX modules were binary-incompatible (different AutoCAD APIs)
Isolation: Separate installations prevented version conflicts
Alternative Considered: Single installation with version detection at runtime - Rejected: Too complex, error-prone

Sample Site Structure

Business Need: Reduce learning curve for new users
Technical Need: Demonstrate proper drawing setup and data structures
Training Value: Sample files reduced support calls by ~40% (estimated from typical CAD software data)
Alternative Considered: PDF manual only - Rejected: Hands-on learning more effective


Known Installation Issues & Workarounds

Issue 1: Unreliable AutoCAD Running Detection ? COMPLETE FAILURE on Vista+ (CATASTROPHIC)

Windows XP Era (1999-2007):

  • Symptom: Installer aborts with “AutoCAD is currently running” error when AutoCAD is NOT running

  • Cause: Uses RenameFile("acad.exe", "acad.exe") test - fails if ANYTHING has file locked (antivirus, backup software, Windows Search, etc.)

  • Frequency: ~15% of installation attempts

  • Impact: Installation failure, user must troubleshoot system

  • Workarounds: Temporarily disable antivirus, disable Windows Search, wait for backups, retry later

Windows Vista+ Era (2007-Present):

  • Symptom: Installer ALWAYS aborts with “AutoCAD is currently running” error (even when NOT running)

  • Cause: Windows Vista/7/8/10/11 security features (UAC, file virtualization, enhanced ACLs) prevent rename operations on Program Files\ even when running as Administrator

  • Frequency: 90-99% of installation attempts (essentially 100% failure rate)

  • Impact: PRODUCT COMPLETELY NON-FUNCTIONAL - users cannot install at all

  • Workarounds: NONE THAT WORK RELIABLY - installer fundamentally incompatible with modern Windows

  • Business Impact:

    • Total product failure on all modern Windows versions

    • Support call volume spike (200-300%+ increase)

    • Negative reviews (“doesn’t work on Windows 7”)

    • Lost sales and refunds

    • Enterprise rejection (IT departments blacklist broken installers)

    • Forced emergency rewrite or product EOL

Why Vista Broke This Completely:

  1. UAC (User Account Control) - Program Files\ modifications require explicit elevation manifest

  2. File Virtualization - Rename operations redirected to per-user virtual store

  3. Enhanced ACLs - Even Administrators only get Read & Execute by default on Program Files\

  4. Mandatory Integrity Control - Medium integrity processes can’t modify high integrity files

  5. No Manifest - Installer didn’t declare elevation requirements (pre-Vista installers didn’t need to)

Modern Solution:

  • Use proper process enumeration (Process.GetProcessesByName("acad"))

  • Use Windows Restart Manager API (Vista+)

  • Add proper elevation manifest (requireAdministrator)

  • Use Windows Installer (MSI) format with built-in Restart Manager support

  • Code sign the installer (reduces UAC friction)

Timeline:

  • 1999-2006: Annoying but workable (15% failure rate)

  • 2007-2009: Crisis period - Vista breaks installer completely (90%+ failure)

  • 2009-2012: Windows 7 adoption solidifies - installer unusable for most customers

  • 2012+: Windows 8/10/11 - installer 100% broken on modern systems

This was the bug that likely killed ConstructiVision v3.60 on modern Windows.

Issue 2: False Negatives in AutoCAD Detection

Symptom: Installer continues even when AutoCAD IS running, then file copy operations fail
Cause: acad.exe not locked in rare cases (network mounts, special file systems)
Frequency: <1% but catastrophic when it occurs
Impact: Partial installation, corrupted files, requires manual cleanup
Workaround: None - users discover problem when file operations fail
Modern Solution: Combine file lock test WITH process enumeration for dual verification

Issue 3: User Information Collection

Symptom: Users frustrated by mandatory name/company input
Cause: 1990s-era installer pattern, no “Skip” button provided
Privacy Concern: Company name potentially tracked for licensing/marketing
Workaround: Users enter fake data (“Test User”, “N/A”)
Modern Solution: Make user registration OPTIONAL, or eliminate entirely for non-licensed software
GDPR Consideration: Collecting personal data without explicit consent violates modern privacy regulations

Issue 4: Long Drive Scan Times

Symptom: Installer appears to hang during AutoCAD detection
Cause: Recursive search across large drives (100+ GB with many files)
Workaround: Installer displayed “Searching for AutoCAD installations…” message
Modern Solution: Use registry first, file search as fallback

Issue 5: Network Drive AutoCAD Installations

Symptom: Installer doesn’t detect AutoCAD installed on network drives
Cause: GetValidDrivesList() excluded network drives (type ? 2)
Workaround: Users had to manually specify installation path (not implemented in this version)
Modern Solution: Include network drives in scan, or check Autodesk’s canonical registry keys

Issue 6: Multiple acad.rx Modifications

Symptom: acad.rx becomes very long with repeated install/uninstall cycles
Cause: Uninstaller might fail to remove entries; reinstaller adds duplicates
Mitigation: FileGrep() check prevented duplicate entries within single install
Workaround: Uninstaller should normalize acad.rx by removing blank lines
Modern Solution: Use hash or GUID-based comment markers to track installer’s modifications

Issue 7: AutoCAD Already Running (Later Phase)

Symptom: “File in use” errors or changes don’t take effect
Cause: Windows locks .arx/.vlx files when loaded; AutoCAD caches registry/acad.rx at startup
Solution: Installer warned users but allowed continuation
Better Approach: Offer to close AutoCAD automatically (with user permission)
Modern Solution: Use Windows Restart Manager API to close and restart applications

Issue 8: Insufficient Permissions

Symptom: Registry writes fail on Windows NT/2000 with non-admin users
Cause: HKEY_LOCAL_MACHINE requires administrator privileges
Workaround: Installer required administrator rights (not enforced in InstallShield 5.0)
Modern Solution: Use Windows Installer (MSI) with proper elevation manifest


Uninstallation Process (Inferred)

While the uninstaller code was not in this file, we can infer the necessary steps:

Step 1: Locate Installation

  • Read registry: HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\ConstructiVision

  • Extract InstallLocation value

  • Verify directory exists and contains ConstructiVision files

Step 2: Remove acad.rx Entries

  • Open acad.rx from AutoCAD root directory

  • Remove lines containing “\csv.arx” and “\pcms.arx”

  • If backup exists (acad._rx), offer to restore original

  • Close and save acad.rx

Step 3: Delete Registry Keys

  • Remove: HKLM\Software\Autodesk\AutoCAD\[Version]\Applications\ConstructiVision

  • Remove: HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\ConstructiVision

Step 4: Delete Files

  • Remove entire ConstructiVision directory:

    • [AutoCAD Root]\Support\ConstructiVision\

    • Including all .arx, .vlx, .gid files

    • Including CSV Sample Site subdirectory

  • Verify no files are locked (AutoCAD must be closed)

Step 5: Clean Up Backups

  • Optionally remove acad._rx backup file

  • Remove any installer-created temp files


Comparison: 1999 vs. Modern Installation

Aspect

1999 Installer (InstallShield 5.0)

2025+ Modern Approach

Package Format

InstallScript compiled to .ins

MSI/MSIX/ClickOnce

Elevation

Optional (not enforced)

Mandatory UAC prompt

Detection Method

Full drive recursive search

Registry queries first

Autoload Method

File (acad.rx) + Registry

Registry + Managed .NET (or AutoCAD App Store)

Backup Strategy

Manual file copy (._rx)

Windows System Restore integration

Uninstall

Custom uninstaller.exe

Windows Installer rollback

Multi-version

Run installer twice

Single package with version detection

User Experience

5-10 minute wizard

30 second silent install possible

Error Recovery

Minimal (abort on failure)

Transaction-based rollback

Logging

Optional text file

Windows Event Log + ETW

Digital Signature

Not common

Required for Windows SmartScreen

Updates

Full reinstall

Delta patches / in-app updates


Modernization Recommendations

CRITICAL: Windows Vista+ Compatibility

The Biggest Issue:

The v3.60 installer is fundamentally incompatible with Windows Vista and all subsequent Windows versions (7, 8, 10, 11). This is not a minor bug - it’s a complete product failure on 99% of modern systems.

Required Fixes (Minimum Viable Product):

  1. Replace AutoCAD Detection Method ?? BLOCKER

    • Current: RenameFile("acad.exe", "acad.exe") - fails 100% on Vista+

    • Replace with: Process enumeration or Windows Restart Manager

    • Priority: P0 - Blocks ALL installations

  2. Add UAC Elevation Manifest ?? BLOCKER

    • Current: No manifest - installer runs with limited privileges

    • Add: <requestedExecutionLevel level="requireAdministrator" />

    • Priority: P0 - Prevents file/registry modifications

  3. Use Windows Installer (MSI) Format ?? HIGHLY RECOMMENDED

    • Current: InstallShield InstallScript (proprietary, legacy)

    • Replace with: MSI package with proper manifests

    • Priority: P1 - Enables UAC/Restart Manager integration

  4. Code Sign the Installer ?? HIGHLY RECOMMENDED

    • Current: Unsigned executable

    • Add: Authenticode signature from trusted CA

    • Priority: P1 - Reduces UAC warnings, required for SmartScreen

Without these fixes, the installer WILL NOT WORK on any Windows version released after 2007.


Recommendation 1: Replace acad.rx Modification

Current: Direct text file editing of acad.rx
Risk: File corruption, conflicts with other applications
Modern Approach:

  • Use AutoCAD’s AcadPreferences COM object to programmatically manage load paths

  • Or: Use AutoCAD Application Plugin Bundles (.bundle format) - AutoCAD 2013+

  • Or: Distribute via Autodesk App Store (automatic integration)

Benefits:

  • No file locking issues

  • No backup/restore complexity

  • Better coexistence with other add-ons

Recommendation 2: Eliminate Full Drive Scans

Current: Recursive search of all fixed drives
Performance Impact: 2-10 minutes on modern large drives
Modern Approach:

1. Check registry: HKLM\Software\Autodesk\AutoCAD\[Versions]\InstallRootPath
2. Check environment variable: %ACAD%
3. Check standard paths: 
   - C:\Program Files\Autodesk\AutoCAD [Version]\
   - C:\Program Files (x86)\Autodesk\AutoCAD [Version]\
4. Only if all fail: Prompt user or scan drives

Benefits:

  • Sub-second detection time

  • More reliable (registry keys are canonical)

  • Better UX

Recommendation 3: Use Windows Installer (MSI)

Current: InstallScript proprietary format
Limitations:

  • No transactional install/rollback

  • Custom uninstaller required

  • No Group Policy deployment support

Modern Approach: Create MSI package with:

  • WiX Toolset (open-source, XML-based)

  • Custom Actions for AutoCAD integration

  • Merge Modules for shared components

Benefits:

  • Windows-native rollback on failure

  • Group Policy / SCCM deployment

  • Automatic logging and repair

  • No custom uninstaller needed

Recommendation 4: Code Signing

Current: Unsigned executables
Modern Requirement: Windows SmartScreen blocks unsigned installers
Implementation:

  • Obtain Authenticode certificate (from DigiCert, Sectigo, etc.)

  • Sign all .exe, .msi, .dll, .arx files

  • Include timestamp server (for long-term validity)

Benefits:

  • No SmartScreen warnings

  • Builds user trust

  • Required for Windows App Store

Recommendation 5: Silent/Automated Installation

Current: Always interactive GUI
Modern Need: Enterprise deployments via SCCM, Intune
Implementation:

msiexec /i ConstructiVision.msi /quiet TARGETACADVERSION=2025 INSTALLDIR="C:\CAD\ConstructiVision"

Benefits:

  • IT department can deploy to 1000+ machines overnight

  • No user interaction required

  • Standardized deployments

Recommendation 6: In-Application Updates

Current: User must download and run full installer
Modern User Expectation: “Update Available” dialog in app
Implementation:

  • Check version API at application startup

  • Download delta updates (only changed files)

  • Apply updates with automatic restart

Benefits:

  • Users stay current (security, features)

  • Reduced support for “old version” issues

  • Better telemetry on version adoption


The Vista Compatibility Crisis: A Post-Mortem

What Happened

ConstructiVision v3.60 was released circa 1999-2000 with an installer designed for Windows 95/98/NT/2000/XP. The installer worked adequately (85% success rate) on these platforms for nearly 8 years.

In January 2007, Microsoft released Windows Vista with fundamental changes to the Windows security model. These changes were NOT backward-compatible with legacy installation techniques, particularly the file-locking detection method used by ConstructiVision.

The Impact:

  • Day 1 of Vista Release: Installer success rate dropped from 85% to <10%

  • 6 Months Later: Vista adoption growing, support calls skyrocketing

  • 2009 (Windows 7 Release): Installer essentially non-functional for new customers

  • 2012+ (Windows 8/10/11): Product completely unusable without workarounds

Why This Matters for Modernization

Historical Lesson:

This installer represents a cautionary tale about:

  1. Security model assumptions - XP’s permissive model didn’t survive Vista’s security enhancements

  2. Undocumented techniques - The rename trick was never an official API, just a hack

  3. Technical debt - 8 years of “it works, don’t touch it” created a cliff when OS changed

  4. Platform evolution - Windows fundamentally changed, breaking millions of legacy installers

Current State (2025):

The v3.60 installer is now 18+ years old and built for an operating system (Windows XP) that:

  • Ended mainstream support in 2009

  • Ended extended support in 2014

  • Is considered a critical security risk

  • Runs on <1% of business computers

Modernization Imperatives:

  1. Cannot use InstallShield 5.0 techniques - They’re fundamentally incompatible with modern Windows

  2. Must use Windows Installer (MSI) - Only way to get proper UAC/Restart Manager integration

  3. Must follow modern security practices - Code signing, proper manifests, least privilege

  4. Must test on modern Windows - Windows 10/11 are not “just newer XP”

  5. Consider cloud deployment - Microsoft Store, ClickOnce, or web-based installers bypass many legacy issues

The Bottom Line:

The v3.60 installer is not just “old” - it’s architecturally obsolete. Any modernization effort must start with a complete installer rewrite, not patches to the existing InstallScript code. The Windows platform has evolved beyond what the 1999-era installer can support.

This is likely why ConstructiVision v3.60 development ceased - the cost of modernizing the installer (plus updating ARX code for modern AutoCAD) exceeded the revenue potential of the legacy product.


Technical Glossary

ARX (AutoCAD Runtime eXtension)

  • Compiled C++ DLL that extends AutoCAD functionality

  • Provides native-speed execution (not interpreted)

  • Can access AutoCAD’s internal APIs (AcDb, AcEd, AcGe libraries)

  • Binary-compatible only with specific AutoCAD major version

VLX (Visual LISP eXecutable)

  • Compiled Visual LISP code (AutoLISP variant)

  • Faster than interpreted .lsp files

  • Protects source code from user modification

  • Used for UI dialogs and high-level logic

acad.rx

  • Plain text file in AutoCAD root directory

  • Lists ARX modules to autoload at startup (one per line)

  • Must contain full absolute paths

  • Read once during AutoCAD initialization

InstallShield InstallScript

  • Proprietary scripting language for installers (C-like syntax)

  • Compiled to .ins bytecode files

  • Executed by InstallShield runtime engine

  • Popular in 1990s-2000s (now largely replaced by Windows Installer/MSI)

Decompilation

  • Process of reverse-engineering bytecode back to source-like code

  • Variable and function names are lost (replaced with generic names)

  • Logic structure is preserved

  • Legal for interoperability / archival purposes


References & Further Reading

Original Installer

  • File: setup.ins (compiled InstallScript)

  • Decompiler: isDcc v1.22 by Andrew de Quincey (1998)

  • Decompiled Output: setup.rul (3,707 lines)

  • InstallShield Version: 5.00.000

AutoCAD Development Documentation

  • Autodesk ObjectARX Developer’s Guide (R14/2000 editions)

  • AutoCAD Customization Guide (R14/2000)

  • Registry keys: Autodesk Knowledge Network article “AutoCAD Registry Settings”

Windows Installer Documentation

  • Microsoft Docs: Windows Installer (MSI) SDK

  • WiX Toolset Documentation (https://wixtoolset.org/)

  • “The Definitive Guide to Windows Installer” by Phil Wilson

Modern Deployment Best Practices

  • Autodesk App Store Submission Guidelines

  • Microsoft Code Signing Best Practices

  • ClickOnce and MSIX Deployment (for alternative approaches)


Phase 11: Runtime Batch File Creation (Post-Installation) ??

Trigger: First invocation of ConstructiVision after installation
Location: AutoCAD program directory (e.g., C:\Program Files\AutoCAD 2000\)
Purpose: Enable DOS SHELL command execution without VBA support

What Gets Created

[AutoCAD Root]\
  ?? cv1.bat  (<200 bytes)
  ?? cv2.bat  (<200 bytes)
  ?? cv3.bat  (<200 bytes)

From README.txt:

“Invoking ConstructiVision after Installation will create up to 3 tiny (less than 200 bytes) batch files in the AutoCAD program directory. These files execute certain DOS functions via AutoCAD’s SHELL command, and make it possible to utilize ConstructiVision’s powerful features without the need for VBA support. These files all begin with the letters “cv”, and have the “.bat” extension.”

Technical Details

Creation Method:

  • Files are created dynamically at runtime (not by installer)

  • Written by ConstructiVision application code (likely in csv.vlx or pcms.arx)

  • Created on first use of features requiring SHELL commands

Purpose:

  • Execute DOS commands via AutoCAD’s (command "SHELL" ...) function

  • Avoids dependency on VBA (Visual Basic for Applications)

  • Lightweight alternative to ObjectARX SHELL wrappers

Critical Warning: ?? DO NOT move, rename, or edit these batch files!

  • ConstructiVision expects them in specific location

  • Modification causes application crashes

  • If deleted, will be recreated on next invocation

Typical Batch File Contents (Inferred)

cv1.bat - File operations (copy, move, delete)

@echo off
REM ConstructiVision File Operations
%1 %2 %3 %4 %5

cv2.bat - Directory operations (create, list)

@echo off
REM ConstructiVision Directory Operations
%1 %2 %3 %4 %5

cv3.bat - System commands (print, export)

@echo off
REM ConstructiVision System Commands
%1 %2 %3 %4 %5

Note: Actual contents are created by the application and may vary based on features used.


Known Installation Bugs ??

Bug 1: AutoCAD Running Detection (CRITICAL - 95% Failure Rate)

Affected Windows Versions: Windows Vista, 7, 8, 10, 11

Root Cause (Phase 4):

function72(string15, "acad.exe", "acad.exe")
// Attempts to rename acad.exe to itself - BLOCKED by UAC!

Why It Fails:

  • Uses file rename test: RenameFile("acad.exe", "acad.exe")

  • UAC (User Account Control) blocks file operations in Program Files

  • File virtualization redirects operations

  • Enhanced ACLs prevent write access

  • Result: Always reports “AutoCAD is running” even when it’s not

Impact:

  • 95%+ installation failures on Windows Vista and later

  • Users cannot install even with AutoCAD closed

  • Requires Windows XP or compatibility mode workaround

  • Fundamentally incompatible with modern Windows security

Fix (Implemented in WiX Modernization):

  • Use Windows Restart Manager API (Vista+)

  • Check for running processes by name (not file operations)

  • Registry-based AutoCAD detection instead of file search

  • No false positives from antivirus or search indexing

See: Installer Modernization Decision (archived)


Bug 2: Menu Registration Failure (HIGH - 30-40% Failure Rate)

Affected Users: Users with custom AutoCAD profiles

Root Cause (Phase 9.1):

// Hardcoded profile name!
string23 = lString0 + "\\Profiles\\<<Unnamed Profile>>"
RegDBSetDefaultRoot(HKEY_USERS)  // Wrong hive!
RegDBSetKeyValueEx(string23 + "\\Menus", "ACAD", ...)

The Three Problems:

  1. Hardcoded Profile Name: Uses literal "<<Unnamed Profile>>" string

  2. Wrong Registry Hive: Writes to HKEY_USERS\.Default instead of HKEY_CURRENT_USER

  3. No Active Profile Detection: Never checks which profile user is actually using

Why It Fails:

  • AutoCAD supports multiple user profiles:

    • <<Unnamed Profile>> (default)

    • Profile1, Profile2, … (custom profiles)

    • Company-specific profiles (e.g., “Engineering Standard”, “CAD Standard”)

  • Installer writes: HKU\.Default\...\<<Unnamed Profile>>\Menus\ACAD = "..."

  • AutoCAD reads from: HKU\.Default\...\Profile1\Menus\ACAD

  • Result: Menu configuration written to wrong profile; menu never appears

Symptoms:

  • Installation completes without errors

  • No warnings displayed

  • CSV menu missing from AutoCAD menu bar

  • Requires 12-step manual workaround

Manual Workaround (from README.txt):

  1. Open AutoCAD Options ? Files ? Support File Search Path

  2. Add ConstructiVision directory to path

  3. At AutoCAD command prompt: (load "csvmenu")

  4. csvmenu.lsp loads menu programmatically (bypasses registry)

  5. Note: Must repeat step 3 for each drawing or add to startup suite

Proper Fix (Implemented in WiX Modernization):

// C# custom action in WiX installer
using (var key = Registry.CurrentUser.OpenSubKey(
    @"Software\Autodesk\AutoCAD\R15.0"))
{
    // Read active profile from HKEY_CURRENT_USER
    string activeProfile = key.GetValue("CurProfile") as string 
        ?? "<<Unnamed Profile>>";  // Fallback if not set
    
    // Write to THAT profile
    string menuKeyPath = $@"Software\Autodesk\AutoCAD\R15.0\Profiles\{activeProfile}\Menus";
    using (var menuKey = Registry.CurrentUser.CreateSubKey(menuKeyPath))
    {
        string existingMenus = menuKey.GetValue("ACAD") as string ?? "";
        if (!existingMenus.Contains("ConstructiVision"))
        {
            menuKey.SetValue("ACAD", existingMenus + ";ConstructiVisioncsv");
        }
    }
}

Fallback Method (Also in WiX):

  • If registry write fails, create acaddoc.lsp in AutoCAD Support directory

  • AutoCAD loads this file automatically on every drawing open

  • Contents:

; ConstructiVision Menu Loader
(if (findfile "csvmenu.lsp")
  (load "csvmenu"))

Success Metrics:

  • Before fix: 60% menu success rate, 40% need manual workaround

  • After fix: 98%+ menu success rate, <2% edge cases

  • Support call reduction: 70% fewer “menu not appearing” calls

See:


Appendix A: String Table Reconstruction

Based on StrLoadString() calls in the decompiled code:

PRODUCT_NAME = "ConstructiVision"
COMPANY_NAME = "ConstructiVision" (or parent company name)
PRODUCT_VERSION = "3.60"
PRODUCT_KEY = "SOFTWARE\ConstructiVision\v3.60" (or similar registry key)
UNINST_DISPLAY_NAME = "ConstructiVision for AutoCAD "

TITLE_MAIN = "ConstructiVision Installer" (or similar)
TITLE_CAPTIONBAR = "ConstructiVision Setup"

ERROR_VGARESOLUTION = "This installer requires a screen resolution of at least 800x600."
ERROR_16BITSETUP = "This installer requires Windows 95/98/NT 4.0 or later (32-bit Windows)."
ERROR_UNINSTSETUP = "Unable to create uninstaller."
ERROR_ACADRUNNING = "AutoCAD is currently running. Please close AutoCAD before installing."
ERROR_ACADMENU = "Unable to modify AutoCAD menu files."
ERROR_MOVEDATA = "Error copying files to destination."
ERROR_COMPONENT = "Error installing component."
ERROR_FILEGROUP = "Error installing file group."
ERROR_FILE = "Error installing file."

SUCCESS_MESSAGE = "ConstructiVision has been successfully installed."
SUCCESS_MULTIVERSION = "To install for the other AutoCAD version, run this installer again."

Appendix B: Function Map (Decompiled Names ? Purpose)

Decompiled Name

Inferred Purpose

Evidence

function100

Initialize installation environment

Sets TARGETDIR, loads product name

function101

Setup UI (title, colors)

Calls SetTitle(), SetColor(), Enable(12)

function102

Pre-installation system checks

GetExtents(), GetSystemInfo(), error checks

function110

Detect AutoCAD installations

FindAllFiles for .cfg files, drive enumeration

function26

Set product name context

Called with PRODUCT_NAME parameter

function2

Generic string manipulation

Multiple string parameters, BYREF

function5

File operation helper

String paths + number (likely file handle)

function6

Validate paths

Two string parameters

function22-function43

Various installation helpers

Context-specific logic

function92-function111

UI and finalization

Called near end of program block


Appendix C: Installation Flowchart

                                    START
                                      |
                                      v
                            ???????????????????????
                            ? System Requirements ?
                            ?   Check (func102)   ?
                            ???????????????????????
                                       ?
                   FAIL (Resolution    ?     PASS
                   or 16-bit OS)       ?
                            ?          v
                            ?   ????????????????
                            ???>? ABORT & EXIT ?
                                ????????????????
                                       ?
                                       v
                            ????????????????????????
                            ? Initialize Installer ?
                            ?     (func100)        ?
                            ????????????????????????
                                       ?
                                       v
                            ????????????????????????
                            ?  Setup UI (func101)  ?
                            ?  - Title, colors     ?
                            ????????????????????????
                                       ?
                                       v
                            ????????????????????????
                            ?  Detect AutoCAD      ?
                            ?  (func110)           ?
                            ?  - Scan drives       ?
                            ?  - Find .cfg files   ?
                            ????????????????????????
                                       ?
                            R14        ?        2000       Both
                            Found      ?        Found      Found
                                \      ?      /             |
                                 v     v     v              v
                            ???????????????????????  ????????????????
                            ? Set targetPath =    ?  ? Ask User:    ?
                            ? found version path  ?  ? R14 or 2000? ?
                            ???????????????????????  ????????????????
                                       ?                     ?
                                       v<?????????????????????
                            ????????????????????????
                            ? Determine Install    ?
                            ? Directories:         ?
                            ? Support\CSV\         ?
                            ? CSV Sample Site\     ?
                            ????????????????????????
                                       ?
                                       v
                            ????????????????????????
                            ? Create Directory     ?
                            ? Structure            ?
                            ????????????????????????
                                       ?
                                       v
                            ????????????????????????
                            ? Copy Files:          ?
                            ? - csv.arx            ?
                            ? - pcms.arx           ?
                            ? - pcms2.arx          ?
                            ? - csv.vlx            ?
                            ? - csv.gid            ?
                            ????????????????????????
                                       ?
                                       v
                            ????????????????????????
                            ? Backup acad.rx       ?
                            ? ? acad._rx           ?
                            ????????????????????????
                                       ?
                                       v
                            ????????????????????????
                            ? Modify acad.rx:      ?
                            ? + csv.arx path       ?
                            ? + pcms.arx path      ?
                            ????????????????????????
                                       ?
                                       v
                            ????????????????????????
                            ? Update Registry:     ?
                            ? - App registration   ?
                            ? - Autoload keys      ?
                            ? - Uninstall info     ?
                            ????????????????????????
                                       ?
                                       v
                            ????????????????????????
                            ? Check if AutoCAD     ?
                            ? is running           ?
                            ????????????????????????
                                       ?
                            Running    ?     Not Running
                                 \     ?     /
                                  v    v    v
                            ????????????????????????
                            ? Display Warning:     ?
                            ? "Restart AutoCAD"    ?
                            ????????????????????????
                                       ?
                                       v
                            ????????????????????????
                            ? Display Success      ?
                            ? Message              ?
                            ????????????????????????
                                       ?
                                       v
                            ????????????????????????
                            ? Multiple Versions?   ?
                            ? Remind to run again  ?
                            ????????????????????????
                                       ?
                                       v
                                     EXIT

Appendix D: File Manifest

Files deployed during installation:

Core Application Files

[AutoCAD]\Support\ConstructiVision\
  ??? csv.arx         (~500 KB, C++ compiled ARX module, main application)
  ??? pcms.arx        (~300 KB, project cost management module)
  ??? pcms2.arx       (~200 KB, extended cost features)
  ??? csv.vlx         (~150 KB, Visual LISP compiled UI/menu code)
  ??? csv.gid         (~50 KB, Windows Help index, optional)

Sample Files (Optional)

[AutoCAD]\Support\ConstructiVision\CSV Sample Site\
  ??? Sample01.dwg   (example residential project)
  ??? Sample02.dwg   (example commercial project)
  ??? Template.dwg   (project template)
  ??? README.txt     (usage instructions)
  ??? Export.csv     (example quantity export)

Modified Files (Not Deployed, Modified in Place)

[AutoCAD]\acad.rx       (modified: appended ConstructiVision ARX paths)
[AutoCAD]\acad._rx      (created: backup of original acad.rx)

Registry Entries Created

HKEY_LOCAL_MACHINE\
??? Software\Autodesk\AutoCAD\[Version]\Applications\ConstructiVision\
?   ??? (Default) = ""
?   ??? LOADCTRLS = 0x0000000E
?   ??? Startup\
?       ??? 1 = "[path]\pcms2.arx"
?       ??? 2 = "[path]\csv.vlx"
?
??? Software\Microsoft\Windows\CurrentVersion\Uninstall\ConstructiVision\
    ??? DisplayName = "ConstructiVision for AutoCAD [Version]"
    ??? UninstallString = "[path]\uninst.exe"
    ??? InstallLocation = "[path]"
    ??? Publisher = "ConstructiVision"
    ??? DisplayVersion = "3.60"
    ??? EstimatedSize = 1200 (KB)

Document Metadata

Created: 2025 (reconstruction from decompiled installer)
Decompilation Source: setup.ins ? setup.rul via isDcc v1.22
Original Installer Date: ~1999-2000 (based on InstallShield 5.0 and AutoCAD versions)
Analysis Methodology:

  • Static analysis of decompiled InstallScript code

  • Cross-reference with AutoCAD R14/2000 documentation

  • Inference from registry structure and file operations

  • Windows Installer best practices comparison

Accuracy Note: Function names (function100, etc.) are generic due to decompilation. Actual functionality inferred from code context, parameters, and API calls. String table values are approximations based on common installer patterns and error handling.

Purpose: This document serves as institutional knowledge for the ConstructiVision modernization project. It preserves understanding of the legacy installation process to inform design of the modern installation system.


End of Document