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()APIMinimum 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.txtfile in installer support directoryReturn 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:
SdRegisterUserDialog 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:
SdAskDestPathDialog ID: 0x2EE5
Browse button uses Windows common folder dialog
Disk space checked via
GetDiskSpace()APIPath 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 fileacad2000.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.exetoacad.exe(same name)In Windows,
RenameFile(source, source)is a NOP (no operation) that succeeds if file is NOT lockedIf the file IS locked (because AutoCAD.exe is running), the operation fails
Failure interpreted as “AutoCAD is running”
Why This Method Was Used:
Simple: No need to enumerate running processes
Cross-Platform(ish): Worked on Windows 95/98/NT without complex APIs
Direct: Tested the actual file that would be modified, not just the process list
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.exeVirtualized:
C:\Users\[Username]\AppData\Local\VirtualStore\Program Files\AutoCAD R14\acad.exeInstaller 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”:
No Elevation Manifest - Installer didn’t declare it needed admin rights
Still Virtualized - UAC virtualization applied even to elevated processes without proper manifest
File System Filters - Antivirus/anti-malware more aggressive on Vista+ (hooks every file operation)
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):
Disable UAC ?
Reduced security
Still failed due to ACLs
Microsoft discourages this
Run in XP Compatibility Mode ??
Sometimes worked on Vista/7
Completely ineffective on Windows 8+
Unpredictable results
Manually Grant Permissions ?
Required modifying AutoCAD installation ACLs
Broke AutoCAD updates
Support nightmare
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:
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)
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)
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)
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)
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)
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.5: Recommended Fix for Modernization¶
Short-Term Fix (Minimal Code Change): Replace the rename test with process enumeration:
// InstallScript 5.0 syntax (approximate)
BOOL IsAutoCADRunning() {
NUMBER result;
LaunchApplication("tasklist.exe /FI \"IMAGENAME eq acad.exe\"", result);
IF result = 0 THEN // Found acad.exe in task list
return TRUE;
END IF
return FALSE;
}
Long-Term Fix (Modern Installer): Use Windows Installer (MSI) with built-in Restart Manager:
<!-- WiX Toolset example -->
<util:RestartResource ProcessName="acad.exe" />
<!-- Automatically handles detection and offers to close -->
Benefits:
No custom code needed
Windows handles all edge cases
Proper multi-user support
Graceful shutdown with file save prompts
Step 5.6: Why This Bug Persisted (Until Vista Killed It)¶
Historical Context:
“It Mostly Worked” - On clean, single-user Windows XP systems with no antivirus, the rename test succeeded 80%+ of the time
Low Priority - Support could tell users “close antivirus and try again” (not ideal but workable)
InstallShield Limitations - InstallScript 5.0 lacked good process APIs; upgrade to newer version required rewriting entire installer
No User Complaints (Documented) - Users accepted installer quirks as “normal” in the 1990s-2000s
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:
Rewrite Installer ($10K-50K cost, 2-3 months)
Move to Windows Installer (MSI)
Proper process detection
UAC manifest
Code signing
Tell Users “XP Only” (losing Vista/7 market)
Market share declining rapidly
Enterprise customers requiring Vista/7
Negative perception
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\subdirectoryThis 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.rxfile was critical to AutoCAD’s operation - corruption could prevent AutoCAD from startingBackup 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 -
FileGrepprevented adding entries multiple times during reinstallsFull 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:
AutoCAD read acad.rx first (loaded csv.arx, pcms.arx)
Then checked registry Applications…\Startup keys (loaded pcms2.arx, csv.vlx)
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.arxStartup\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 uninstallerInstallLocation= Installation directoryPublisher= Company nameDisplayVersion= 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:
UAC (User Account Control) - Program Files\ modifications require explicit elevation manifest
File Virtualization - Rename operations redirected to per-user virtual store
Enhanced ACLs - Even Administrators only get Read & Execute by default on Program Files\
Mandatory Integrity Control - Medium integrity processes can’t modify high integrity files
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\ConstructiVisionExtract
InstallLocationvalueVerify 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\ConstructiVisionRemove:
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):
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
Add UAC Elevation Manifest ?? BLOCKER
Current: No manifest - installer runs with limited privileges
Add:
<requestedExecutionLevel level="requireAdministrator" />Priority: P0 - Prevents file/registry modifications
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
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
AcadPreferencesCOM object to programmatically manage load pathsOr: 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:
Security model assumptions - XP’s permissive model didn’t survive Vista’s security enhancements
Undocumented techniques - The rename trick was never an official API, just a hack
Technical debt - 8 years of “it works, don’t touch it” created a cliff when OS changed
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:
Cannot use InstallShield 5.0 techniques - They’re fundamentally incompatible with modern Windows
Must use Windows Installer (MSI) - Only way to get proper UAC/Restart Manager integration
Must follow modern security practices - Code signing, proper manifests, least privilege
Must test on modern Windows - Windows 10/11 are not “just newer XP”
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" ...)functionAvoids 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)
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 |
|---|---|---|
|
Initialize installation environment |
Sets TARGETDIR, loads product name |
|
Setup UI (title, colors) |
Calls SetTitle(), SetColor(), Enable(12) |
|
Pre-installation system checks |
GetExtents(), GetSystemInfo(), error checks |
|
Detect AutoCAD installations |
FindAllFiles for .cfg files, drive enumeration |
|
Set product name context |
Called with PRODUCT_NAME parameter |
|
Generic string manipulation |
Multiple string parameters, BYREF |
|
File operation helper |
String paths + number (likely file handle) |
|
Validate paths |
Two string parameters |
|
Various installation helpers |
Context-specific logic |
|
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