Thread execution failed

I am trying to uninstall webex from a machine using this action script
wait “MsiExec.exe /X{{uninstall string goes here}”

when i run this in the debugger. I keep getting Thread Execution failed(2)
any help would be much appreciated

Please format your scripts & relevance by highlighting and hitting the ‘code format’ button

like this

That fixes a few things like tags interpeted as HTML formatting or doublequotes presented as “smart quotes”

Your command line was

wait "MsiExec.exe /X{{uninstall string goes here}"

Because of the way you quoted the whole command line, Windows is interpreting the whole thing as a filename - a filename that starts with “MsiExec.exe”, then has a space, and then has “/X” and the rest of it all as part of the filename.

Anticipating your next issue, you may need to use the 64-bit version of msiexec. Which means turning off wow64 redirection. Try

action uses wow64 redirection false
wait MsiExec.exe /X{{uninstall string goes here}

Appreciate it, let me go ahead and try that

1 Like

so i tested that yesterday, the status has been on running the whole day

Ah, I see an issue there. That would have launched the MSI uninstaller interactively, but it’s trying to present a window to the LocalSystem user, not to any logged-on user.

You need to trigger a silent uninstall, that proceeds without launching a GUI window or at least without waiting to prompt the user for input. On whatever machine you tested you’ll likely need to kill the msiexec.exe process or reboot the computer so you can try again. This time send silent parameters for MSI. They can vary by package but usually /qn is sufficient. You may also need the REBOOT=ReallySuppress parameter to prevent MSIExec from triggering a reboot. If you need any other special parameters, they might vary by package and you may have to check the vendor.

action uses wow64 redirection false
wait MsiExec.exe /X{{uninstall string goes here} /qn REBOOT=ReallySuppress

So i got this to run for webex,

runhidden "{pathname of system folder & "\msiexec.exe"}" /x {{uninstall string} /qn
runhidden "{pathname of system folder & "\msiexec.exe"}" /x {{uninstall string} /qn
runhidden "{pathname of system folder & "\msiexec.exe"}" /x {{uninstall string} /qn
runhidden "{pathname of system folder & "\msiexec.exe"}" /x {{uninstall string} /qn

we have 4 versions of webex so i have 4 actions. but what i noticed some of them uninstall and some of them done. which does not make sense as to why.

ok will try this and see if it will uninstall. thank you

Check whether they’re per-machine or per-user installs.
Per-machine installs should be in the Registry at HKLM\Software
Per-user installs should be at HKCU\Software

i.e. HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall or HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall

If these are per-user installations it gets a lot more complicated to remove them because you have to impersonate the user

Yeah that’s what I’m thinking. Also I ran your script it resulted as false and exit code is 1605.

Ive checked most of them that are failing and not uninstalled. the all look like to be per-machine installs

A few things…

I didn’t notice your switch from ‘wait’ to ‘runhidden’. You probably need to switch back to ‘wait’ or ‘waithidden’. ‘runhidden’ doesn’t wait for the child process to finish, so the next msiexec would get triggered while an earlier one is still running, and you’d get an error about a setup process is still in progress.

1605 is the MSI code for ‘the product is not installed’ so you’d need to check that your list of GUIDs you’re trying to uninstall is actually correct. The exit code from the Action will be only the last wait/waithidden command, so you could have success uninstalling an earlier one but a failure with a later one, and you’d only see the failure from the Console. You need to view the client log to get the return code from each command.

And be sure your uninstall commands are correct to begin with. Try them on a command line, outside of BigFix, and don’t even try to get them working in an Action until you’ve figured out that part.

1 Like

Alright will try all these steps again and let you know the outcome. really appreciate the help

1 Like

so this screenshot states the exit code 1605 but it removed the software from the machine.
for other machines it states the same as this screenshot but ends up not removing it from the machine. It seems like its just picking and choose what machine it likes hahaha this is frustrating

Which also may help us is that the file for webex is in this location

\AppData\Local\Programs\Cisco Spark\CiscoCollabHost.exe"


\AppData\Local\Programs\Cisco Spark"

Is that a per-user AppData? What is the full path the file.

1 Like

“C:\Users\smiller1\AppData\Local\Programs\Cisco Spark\CiscoCollabHost.exe”

"C:\Users\smiller1\AppData\Local\Programs\Cisco Spark"

Ok, for a beginner, it looks like you’re starting off with a really complex scenario. Per-User installs are much more difficult to deal with than per-system installs, because you have to spawn the uninstall process as the user who installed it.

Do you by chance have MDM available in your deployment? I think that would make this a lot easier.

If you don’t, and you’re dealing with per-user installs, then I’m afraid it’s much more complex. You can use ‘override’ actionscript commands to run the uninstallers as either “the logged on user”, or as any other user account – but if you want it to run under some other user account, you will have to supply the username and password to launch the process.

I posted some summaries of the options at Tip - Action Override User settings . The simplest form would be to use example 2 where you override the uninstall commands to runas=currentuser

The other issue is that you have four different GUIDs listed for uninstall there. Are you sure that’s all of them, or are there other GUIDs that might correlate to different versions/architectures/browsers ?
As you’ve seen, you’re getting the exit code 1605. But the last command that executes will be the code that is preserved, you could have had three successful installs followed by the last one returning 1605 (because that version was not installed), and the only result you’d see is the 1605. You have to retrieve the log from the client to see the exit codes on each individual command.

So something you could try is to only execute the ones that are present (for the current user). Repeat this for each GUID you know of -

if {exists keys "FIRST_GUID" of keys "Software\Microsoft\Windows\CurrentVersion\Uninstall" of current user keys of (x32 registries; x64 registries)
override wait
waithidden "{pathname of system folder & "\msiexec.exe"}" /x {{FIRST_GUID} /qn

if {exists keys "SECOND_GUID" of keys "Software\Microsoft\Windows\CurrentVersion\Uninstall" of current user keys of (x32 registries; x64 registries)
override wait
waithidden "{pathname of system folder & "\msiexec.exe"}" /x {{SECOND_GUID} /qn

// repeat for each GUID
1 Like

I will check and see if i have MDM available in my deployment in the meantime, I am getting this error for the code you sent me. its also weird because if is it a per user install. why is there an uninstall string in the HKLM that would indicate its a per-machine install.

Ah my mistake there. Since we are overriding ‘wait’, we need to use ‘wait’ (not ‘waithidden’) to launch the command

Also this may not work in the Fixlet Debugger, the debugger might not have permission to impersonate.

And you may have a mix of per-user and per-machine installs. I’m just working with what you’re telling me, that it was installed in the user appdata.

So I pushed a the fixlet to these relevant machines that have the same GUID. They failed super quick. what is MDM and how do I check if i have it in my deployment?