Hi,
No idea how this installer passed the QA team and got released to the public in this form, but it says a lot about the AMD's QA, considering this seems to be an old issue. I just spent the last 3hours trying to get this app to install, because the installer wrongly identified another application installed on my PC as Ryzen Master because of a badly written vbs script embedded in setup.exe that is used to check if RM is installed on the system by checking the registry entries from "Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall". In my case, it was flagging Total Commander 9.xx as RM, but after changing the version from 9.xx to 1.xx, RyzenMaster installed without issue.
Here's the script as extracted from setup.exe(it gets unpacked in c:\AMD\RyzenMasterExtract\MSIFiles\Qt_Dependancies after running the downloaded installer):
'************************************************************************************
'Function to check if Ryzen Master is already deployed on the system for downgrade
'************************************************************************************
Function PrdctInstalled()
On Error Resume Next
const HKEY_LOCAL_MACHINE = &H80000002
Set WshShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim PrdFile : PrdFile = "C:\AMD\RyzenMasterExtract\MSIFiles\Packages\AMD Ryzen Master UI.exe"
If objFSO.FileExists(PrdFile) Then
Dim PrdVer : PrdVer = objFSO.GetFileVersion(PrdFile)
strComputer = "."
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\"& strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
objReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys
For Each subkey In arrSubKeys
InstalledAppName = ""
InstalledAppName = WshShell.RegRead("HKLM\" & strKeyPath & "\" & subkey & "\DisplayName")
Dim SysemComponent : SysemComponent = WshShell.RegRead("HKLM\" & strKeyPath & "\" & subkey & "\SystemComponent")
Dim InstalledAppVer : InstalledAppVer = WshShell.RegRead("HKLM\" & strKeyPath & "\" & subkey & "\DisplayVersion")
If InStr(InstalledAppName, "AMD Ryzen Master") > 0 AND InStr(InstalledAppName, "SDK") = 0 AND (SysemComponent = 1) then
If (InstalledAppVer) > (PrdVer) Then
PrdctInstalled = "DOWNGRADE"
Exit Function
End If
End If
Next
Else
PrdctInstalled = "NOFILE"
End If
Set objReg = Nothing
Set WshShell = Nothing
Set objFSO = Nothing
End Function
The issue is caused by this check (SysemComponent = 1). I don't have any experience in writing vb scripts but in my case it seems to compare an empty string with 1 and for some reason it makes that if clause to evaluate to True.
I attached a slightly modified version of the script. It will just show a message box with the found program name causing the issue, and it will show "not found!" if this is not the issue. It works for version 2.1.1.1472, but you have to run the downloaded installer at least one time so it creates the file "C:\AMD\RyzenMasterExtract\MSIFiles\Packages\AMD Ryzen Master UI.exe". It uses the version of this file to check the registry for older versions. The script must be run with a 64bit version of wscript.exe. The 32bit version of wscript.exe will check the regsitry entries from Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall instead of "Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
I also had this problem after reinstall of W10, Nothing helped, Uninstall drivers, install, AMD clear utility, Chipsets drivers from AMD vs ASUS (Motherboard), regedit. I did the installation of W10 again but without any Win10 upgrades. I started installing RyzenMaster and everything went without problems. During the RyzenM installation, the MVisual C ++ library is checked for possible installation. I believe that the reluctance to continue to install Ryzen Master with a newer version is due to a faulty scan of MV C ++. So it's not about the presence of a newer version of Ryzen Master, but of the Visual C ++ library. Removing newer Visual C ++ will allow a successful installation of RyzenM. After that, the libraries can be reinstalled. Sorry for my bad English
Yeah, that embedded VBS script is badly written and it can cause unexpected results. It can identify any installed program as RM in certain conditions. The issue starts with these two lines:
Dim SysemComponent : SysemComponent = WshShell.RegRead("HKLM\" & strKeyPath & "\" & subkey & "\SystemComponent")
Dim InstalledAppVer : InstalledAppVer = WshShell.RegRead("HKLM\" & strKeyPath & "\" & subkey & "\DisplayVersion")
As I said, I don't have any experience in writting VBS scripts, but these two lines appear to have unexpected results if WshShell.RegRead fails. If they would have moved the variable declaration outside of the for loop, and reinitialized those two variables at the beginning of each for iteration, then it wouldn't have produced unexpected results. And it looks like this is exactly what the script's author did for InstalledAppName = WshShell.RegRead, probably after failing in his testing initially.
Hopefully this will reach the team in charge of the installer so they would fix it in the future! @mods
You all have great information here. Nobody from the driver team at AMD will likely see your thread here. These are USER TO USER forums only and the couple of mods here respond to only a very small fraction of threads.
I highly suggest you all send your findings to AMD Support. That is about the only chance you have of it being passed on to engineering. Here is the link: https://www.amd.com/en/support/contact
*sigh* could it be as simple as whatever is compiling the code is super sensitive on cAsE? i.e.
"If InStr(InstalledAppName, "AMD Ryzen Master") > 0 AND InStr(InstalledAppName, "SDK") = 0 AND (SysemComponent = 1) then"
then should be...Then
If the script is just evaluating the following line on some random registry entry... then that might explain why it fails randomly and some people have success installing one thing, while others another....
"If (InstalledAppVer) > (PrdVer)"
I don't know much about VB either but proper syntax seems to be "Then" not "then."
tqtr - is there a way to edit this script (or use yours) and still use the installer or is this a puzzle left to us to figure out, randomly uninstalling programs / changing versions in the registry?
VBS is case insensitive, so doesn't matter how you write "then".
You can use the script I attached in my first post to see which program is "the newer version". My script is the orignal script, I just added two "prints" to see where the problem is and a call for that function in that script.
Thanks man. I did try an online compiler and I did see that it didn't care about "Then" vs. "then". But I can't figure out what else it could be, looking at the code. Perhaps this is some sort of edge case that makes the "then" case sensitive? I'm almost certain that the behaviour is that the script is completely ignoring this line: If InStr(InstalledAppName, "AMD Ryzen Master") > 0 AND InStr(InstalledAppName, "SDK") = 0 AND (SysemComponent = 1)
... and just iterating through every program I have installed using this:
If (InstalledAppVer) > (PrdVer) Then
PrdctInstalled = "DOWNGRADE"
Exit Function
End If
Thank you..This solution worked wonderfully. I found 4 programs which had version above 2 which has nothing to do with amd. Can not believe AMD people have released a crappy work like this which is going on for so long even for the latest version..
Thanks so much for your script! I had almost given up after trying a couple of other solutions that didn't work for me.
Using your script I was able to narrow the problem down to three applications and modify their DisplayVersion so that the install worked!
Awesome!
I LITERALLY had to change "DisplayVersion" in EVERY SINGLE ENTRY in \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ (where the subkey existed) to get it to install. I swear it has to be that stupid "then".
If anything you have installed on your system is versioned higher than "2.1..." it just won't go. Didn't matter if it was C++... or whether it was a system component or not.
WORST.
Best part is, it thinks it's upgrading. I hope it didn't randomly uninstall something on me.
So, solution is:
Have absolutely nothing else installed that hits that folder above with a subkey value > 2.1 for "DisplayVersion". Or... go through the pain of changing each and every one to something smaller than 2.1.
That was a bit extreme editing all those registry values, sorry my previous reply a was a bit late. Not all of the DisplayVersion entries larger than 2.1 had to be edited.
Don't worry about the installer randomly uninstalling something else, i don't think that's the case.
I found that I literally had to change everything that had a "DisplayVersion" key. I mean, I didn't retry after each edit, or in every order, but I initially tried editing only those entries that had "System Component = 1". Changing all of those didn't do the trick. So I went and did ALL of them... still didn't work. Went back, found 1 more that I'd missed (and it wasn't a "System Component = 1" program). Finally it worked.
I may do a clean install of windows soon and will try installing Ryzen Master on a clean install - I bet it works fine.
@tqtr I almost never leave responses to threads, even if they helped me. Just wanted to shout out that this was an amazing solution to a problem others did not seem to be able to solve. Everyone else suggested a brute force plan of attack lowering the DisplayVersion for all entries in HKEY...\Uninstall. This would have taken hours. Your quick vb tool identified 2 different entries that needed to be downgraded below 2.1. And that's it - Mater 2.1.1 installed without a problem. You took a 2 hour tedious task and made it 2 minutes. Thanks for making the world a better place; cheers