I thought I'd share a very strange setup issue that we've seen a number of times both with Service Pack 4 and Hotfix installation.

When applying SP4 for SQL2000 the setup fails with the usually cryptic message about setup failing on a remote node. When you inspect the at the sqlsp log where setup was initiated we see something like this...

.....

CRemoteProcess::RunUntilComplete [0xac] error code: -1

CThreadPool::RunUntilCompleteHlpr WaitForMultipleObjects returned: 0

CThreadPool::RunUntilCompleteHlpr signaled thread [0xac]

Thread [0xac] exit code: [0xffffffff]

CRemoteProcess::RunUntilComplete [0xbc] exit code: 3010

Remote process exit code was '3010' (xxxxxxxxx1).

CThreadPool::RunUntilCompleteHlpr WaitForMultipleObjects returned: -1

CThreadPool::RunUntilCompleteHlpr signaled thread [0xbc]

Thread [0xbc] exit code: [0xffffffff]

CRemoteProcess::RunUntilComplete [0xa8] exit code: 3010

Remote process exit code was '3010' (xxxxxxxxx2).

CThreadPool::RunUntilCompleteHlpr WaitForMultipleObjects returned: -1

CThreadPool::RunUntilCompleteHlpr signaled thread [0xa8]

Thread [0xa8] exit code: [0xffffffff]

CProcess::RunUntilComplete [0xa4] exit code: 3010

Remote process exit code was '3010' (xxxxxxxxx3).

CThreadPool::RunUntilCompleteHlpr WaitForMultipleObjects returned: -1

CThreadPool::RunUntilCompleteHlpr signaled thread [0xa4]

Thread [0xa4] exit code: [0xffffffff]

CThreadPool::RunUntilComplete returned -1

CThreadPool::RunUntilComplete execution level=1, need execution: 0

One or more errors occurred while running the remote/unattended setups.

Disconnecting from remote machine (xxxxxxxxx4)...

........

18:53:52 End Action : Run setup on cluster nodes

18:53:52 One or more errors occurred while running remote setup on the clustered

machines.

18:54:59 Setup failed to perform required operations on the cluster nodes.

18:54:59 End Action : ClusterSetupHelper

18:54:59 Begin Action : LogEvent

18:54:59 End Action : LogEvent

18:54:59 Begin Action : CloseEventLog

18:54:59 End Action : CloseEventLog

 

Now we can ignore the 3010 result codes, these just indicate that a reboot is required.

On the remote node we get no log file generated.

We do see some rather cryptic message in the event log on the remote node

Information 26 25/6/2006 9:15:20

Application Popup xxxxxxxxx4 None

N/A

Application popup: remsetup.exe - Unable To Locate Component :This application has failed to start because cnvrem.dll was not found. Re-installing the application may fix this problem.

Information 26 25/6/2006 9:11:58

Application Popup xxxxxxxxx4 None

N/A

Application popup: remsetup.exe - Unable To Locate Component : This application has failed to start because cnvrem.dll was not found. Re-installing the application may fix this problem.

The above would explain why we don't get a log generated on the failing node since the remote setup didn't run.

Monitoring file access on the failing server the following was observed

cnvsvc3.exe:1980 QUERY

INFORMATION \\W000012004\admin$\PSAPI.DLL SUCCESS FileBasicInformation

3195 6:50:19 µµ cnvsvc3.exe:1980 CLOSE \\xxxxxxxxx4\admin$\PSAPI.DLL SUCCESS

3196 6:50:19 µµ cnvsvc3.exe:1980 OPEN \\xxxxxxxxx4\admin$\PSAPI.DLL IS DIRECTORY Options: Open Access: All

3197 6:50:19 µµ cnvsvc3.exe:1980 OPEN \\xxxxxxxxx4\admin$\PSAPI.DLL IS DRECTORY options: Open Access: Execute

Now PSAPI.DLL is returning 'IS DIRECTORY' true, inspecting the directories on the machine we found that there was indeed a directory

C:\Windows\PSAPI.DLL

This is an unusuall name for a directory to say the least, further searching on the C drive found valid PSAPI dlls so simply renaming the dirrectory C:\Windows\PSAPI.DLL to C:\Windows\xPSAPI.DLL was all that was required to allow the setup program to successfully complete.

A very similar issue occurs when you apply hotfixes, the log will look something like this

151.141: SQL DLL: BeforeInstallOps() returned 0

151.266: ================================================================================

151.266: 2008/08/29 17:12:53.184 (local)

151.266: f:\487f6b6fa9aa74ddc2\i386\update\update.exe (version 6.2.29.0)

151.266: SpawnInstancesForInstall: InstRetVal1 = 0x80

151.266: SQL DLL: Entered callback FailedInstallation()

151.266: SQL DLL: Instance Status Summary

151.281: SQL DLL: Instance Status: MSSQLServer - Failure

151.281: SQL DLL: Instance Status: SQLTools - Success

151.610: SQL DLL: Watson: Param1 = Unknown

151.610: SQL DLL: Watson: Param2 = 0x80

151.610: SQL DLL: Watson: Param3 = Unknown

151.610: SQL DLL: Watson: Param4 = 0x0

151.610: SQL DLL: Watson: Param5 = Unknown

151.610: SQL DLL: Watson: Param6 = Unknown

151.610: SQL DLL: Watson: Param7 = SQLServerClient

151.610: SQL DLL: Watson: Param8 = Update.exe@6.2.29.0

151.610: SQL DLL: Watson: Param9 =

151.610: SQL DLL: Watson: Param10 = 2275

151.610: SQL DLL: FailedInstallation() returned 128

151.610: DoInstallation: FailedInstallation Failed: 0x80

164.938: Message displayed to the user: An error in updating your system has occurred.

164.938: User Input: OK

Again the solution remains to rename/remove the offending directory.

-------------------------------------------------------------------------------------------------------------------------------------------------------

UPDATE:

This incorrect directory name can also cause failure of standalone installs.....