The case of the Softimage startup freeze and the Wacom driver

Click to watch videoTroubleshooting a startup crash with Process Monitor
A customer called to report that his Softimage crashed/froze at startup when it tried to display the OpenGL viewports. This is the classic symptom of a display driver problem, and the hide-the-OpenGL-viewports test seemed to confirm this. But reinstalling the display driver didn’t help (Softimage was working just the other day, so the same driver should work).

Using Process Monitor, I was quickly able to track down the problem to the Wacom driver. After he reinstalled the Wacom driver and restarted, Softimage started up again. Watch the video to see how to quickly find a possible problem in a 200MB log file with 845,000 log entries 😉

Looping over an XSICollection

This is a beginner-level walkthrough of a VBScript snippet.

set oColl = CreateObject( "XSI.Collection" )
oColl.Items = "*_face_crv?"

for each oObj in oColl
	LogMessage oObj.fullname 

Line 01: We use the VBScript function CreateObject to create an instance of the ActiveX object XSICollection. XSICollection is a part of the XSI SDK, and is available only inside Softimage.

Line 02: Softimage uses string expressions to reference scene elements. For example, the expression “*_face_crv?” expands to “lf_face_crv1,lf_face_crv2,rf_face_crv1,rf_face_crv2” if you have objects with those names in the scene. The [undocumented] XSICollection.Items property takes a string expression and puts the corresponding objects into the XSICollection.

Line 04: We use the VBScript for each nextstatement to loop over the XSICollection.

Line 05: LogMessage is a method of the Application object, which is part the XSI SDK. FullName is a property available on most objects in Softimage.

Here’s the JScript equivalent, with an additional line of code that uses regex to update the object names.

var oColl = new ActiveXObject( "XSI.Collection" );
oColl.Items = "*_face_crv";

oEnum = new Enumerator( oColl ) ;
for (;!oEnum.atEnd();oEnum.moveNext() )
	var oSelItem = oEnum.item() ;
	LogMessage( oSelItem.fullname );
	oSelItem.Name = oSelItem.Name.replace( /crv/, "loc" );
	LogMessage( oSelItem.fullname );


Further reading:

ADSKFLEX_LICENSE_FILE value in the registry

Softimage saves the location of the license server in the registry. On Vista, the location is saved in the ADSKFLEX_LICENSE_FILE value:

HKEY_CURRENT_USER\Software\FLEXlm License Manager

On my XP system, the value is saved under HKEY_LOCAL_MACHINE.

Over time, you may end up with some obsolete license server locations saved in the registry. For example, if you replace your license server, the location of the old server is still in the registry.

So whenever you cannot get a license, and everything else seems to check out ok, open up regedit and clear the ADSKFLEX_LICENSE_FILE value, to make sure Softimage is connecting to the right license server.

I had a support case the other week where the customer wrote

xsibatch cannot get a license, even though setenv.bat an exact copy of the setenv.bat from a machine where xsibatch can get a license.

It turned out the problem was because of ADSKFLEX_LICENSE_FILE. After he deleted that value, xsibatch connected to the license server specified by setenv.bat and got a license.

Transferring your license to a new license server

You will have to contact the Business Center to transfer your license to the new license server.

A network license is tied to the Ethernet address (aka MAC address or physical address) of a network adapter on the license server computer. So you need a new license if you move your license server to a different computer.

After you set up the new license server, update the setenv.bat files on your workstations to point to the new license server.

Note that on the workstations, the location of the old license server persists in the registry value HKEY_CURRENT_USER\Software\FLEXlm License Manager\ADSKFLEX_LICENSE_FILE. It’s a good idea to clear that value, to make sure XSI.exe and xsibatch.exe don’t try to use the old server.