PowerShell PSA Software Tcl Installation Problem

Sifos PowerShell PSA Software requires Tcl version 8.4.5 or later in order to run. The installers furnished by Sifos include a copy of Tcl that will allow PowerShell PSA to run correctly. One of the tasks performed during software installation is to check the target PC to determine whether or not Tcl is installed. When Tcl is installed on a target PC, the registry key HKCR\.tcl is defined by the Tcl installer. A problem has been encountered where other software packages (packages that are not general purpose Tcl) redefine the value stored in HKCR\.tcl. To insure that the Tcl installation does not interfere with the correct operation of another software package on the target PC, when a redefined HKCR\.tcl is detected AND Tcl cannot be located under any of the normally used default locations, the PowerShell PSA installer errs on the side of caution, and inhibits the installation of Tcl. The installer (starting with version 4.1.3) will notify the user of this problem with the dialog shown in Figure 1. (Installer versions 4.1.0, 4.1.1, and 4.1.2 will encounter a ‘hard’ runtime error that will cause the installer to terminate abnormally.)

Working Around the Re-defined HKCR\.tcl Key

The only software package which causes this problem that has been encountered to-date is Altium Designer. The root cause of the problem is:

1) A non-standard software package has co-opted the binding to the commonly used extension for Tcl script (i.e. “.tcl”). The normal executable associated with this extension is a Tcl shell application, for example “tclsh84.exe”.

2) The actual executable referenced in the registry is not a standard Tcl executable, and does not contain embedded binary version information. This causes a runtime error to occur in installer versions 4.1.0, 4.1.1, and 4.1.2. The runtime error will not occur in installer version 4.1.3 or later.

PowerShell PSA requires a working version of Tcl on the host machine in order to function correctly. The problem is that the only common information for various Tcl installations that we have encountered over the last few years is in fact the specific registry key HKCR\.tcl, and up to this point, the existence of this key has always been directly tied to an actual Tcl installation on the host.

To work around this problem, use the following procedure: The “mechanics” involve allowing a standard copy of Tcl to be installed on the PC, which will then allow PowerShell PSA to install correctly. A side effect of installing Tcl is that HKCR\.tcl will be redefined to a standard value. To allow you to revert to the previous HKCR\.tcl setting, you must save a copy of the setting BEFORE performing the Tcl installation.

A) Save a copy of the existing key HKCR\.tcl: Run “regedt32” (on XP, use Start->Run…; on Win7, just type the name into the “Search programs and files” field accessible when you click on the Start icon)

Using the tree view on the LEFT of the Registry edit window, navigate to HKEY_CLASSES_ROOT, as shown in Figure 2. Expand it, and find the key “.tcl”. Do a RIGHT mouse button click, and select “Export” from the pop-up menu, as shown in Figure 3.

Export the key to a file named “dottcl.reg”. This will provide the means to easily restore the key to its exact state

B) Open a cmd.exe window, and change your working directly to the location you have saved the PowerShell PSA Installer. For example, if you stored the file under c:\temp, use the command: cd c:\temp

C) Run the PowerShell PSA installer with the following command line: PSA_Installer_4.1.3.exe ForceTCLInstall=1 This should allow the PowerShell PSA installation to complete successfully.

D) Restore the HKCR\.tcl key, by using the “File -> Import” menu selection in regedt32 to import the “dottcl.reg” file that you saved in step (A). If you encounter any problems with the PowerShell PSA Installation, please send the log files to Sifos. The log files will be named something like this: PSA_Software_20151105xxxxxx_000_ Tcl8.4.20Installer.log PSA_Software_20151105xxxxxx_001_PSAInstaller.log Where “xxxxxx” will be a time stamp.