This morning I saw a post taking a poll on how often 2014 SP2 crashes. So, here’s some crash numbers from my system:

There’s a big difference in the number of sessions, so a percentage chart might make it easier to compare the versions:

Crashes are actual crashes caught by CER. What I called “dirty exits” are exits or crashes not caught by CER. For example, killing xsi.exe in the Task Manager is a dirty exit. Clean exits are when you quit Softimage normally (for example, when you click File > Exit or the Close X icon).
I used this Python snippet to extracts the CER crash data from the registry.
#HKEY_USERS\S-1-5-21-1384716164-225505876-396224183-1000\
# Software\Softimage\SOFTIMAGE|SICORE Engine\C:|Program Files|Autodesk|Softimage 2014 SP2|Application|bin\ProductInfo
from _winreg import *
# dicts keyed by Softimage version
dCrashes = {}
dCleanCloses = {}
dStarts = {}
#
# Get the CER crash data for each SI version
# under the SOFTIMAGE|SICORE Engine key
#
def enum_sicore( subkey ):
try:
i = 0
k = OpenKey( HKEY_USERS, "%s\Software\Softimage\SOFTIMAGE|SICORE Engine" % subkey, 0, KEY_READ )
while True:
subkey1 = EnumKey(k, i)
# extract product name eg "Softimage 2014 SP2"
s = subkey1.rsplit( '|' )[3]
pi_key = OpenKey( k, "%s\%s" % (subkey1,"ProductInfo"), 0, KEY_READ )
value = QueryValueEx(pi_key, "crashCount" )
dCrashes[ s ] = value[0]
value = QueryValueEx(pi_key, "SessionCleanCloseCount" )
dCleanCloses[ s ] = value[0]
value = QueryValueEx(pi_key, "SessionStartCount" )
dStarts[ s ] = value[0]
i += 1
except WindowsError:
# WindowsError: [Errno 259] No more data is available
pass
#
# For each user
#
try:
i = 0
while True:
subkey = EnumKey(HKEY_USERS, i)
enum_sicore( subkey )
i += 1
except WindowsError:
# WindowsError: [Errno 259] No more data is available
pass
#
# Print out the numbers
#
crashes = 0
exits = 0
starts = 0
for key in dCrashes:
print key
print " Crashes: %d" % dCrashes[key]
print " Dirty Exits: %d" % (dStarts[key] - dCleanCloses[key])
print " Starts: %d" % dStarts[key]
crashes += dCrashes[key]
exits += (dStarts[key] - dCleanCloses[key])
starts += dStarts[key]
# Print out CSV for export into Excel for charting
for key in dCrashes:
print "%s, %d, %d, %d" % (key, dCrashes[key], dStarts[key] - dCleanCloses[key], dStarts[key])

