• Welcome to TechPowerUp Forums, Guest! Please check out our forum guidelines for info related to our community.

Prerequisite Modifier for Steam

FordGT90Concept

"I go fast!1!11!1!"
Joined
Oct 13, 2008
Messages
26,263 (4.34/day)
Location
IA, USA
System Name BY-2021
Processor AMD Ryzen 7 5800X (65w eco profile)
Motherboard MSI B550 Gaming Plus
Cooling Scythe Mugen (rev 5)
Memory 2 x Kingston HyperX DDR4-3200 32 GiB
Video Card(s) AMD Radeon RX 7900 XT
Storage Samsung 980 Pro, Seagate Exos X20 TB 7200 RPM
Display(s) Nixeus NX-EDG274K (3840x2160@144 DP) + Samsung SyncMaster 906BW (1440x900@60 HDMI-DVI)
Case Coolermaster HAF 932 w/ USB 3.0 5.25" bay + USB 3.2 (A+C) 3.5" bay
Audio Device(s) Realtek ALC1150, Micca OriGen+
Power Supply Enermax Platimax 850w
Mouse Nixeus REVEL-X
Keyboard Tesoro Excalibur
Software Windows 10 Home 64-bit
Benchmark Scores Faster than the tortoise; slower than the hare.
If you've used Steam a lot you've probably noticed a few games where Steam tries to install something every time an application is started. This application is intended to tell Steam it is installed so it can quit trying.

pms.png


1) Select the VDF for the application you're trying to install. Not all applications have prerequisites so not all applications have a VDF file to select. The VDF usually resides in the application's install directory as either install_APPID.vdf or installscript.vdf. Either should work but I would recommend using installscript.vdf when both are available.

2) Input the application ID number for the product. It should show up in the drop down list acquired from Steam but it might not. The easiest way to get it is to find the Steam store page for the program. For example, here is the full URL to the Dishonored store page and I have bolded the application ID number in it. Input that into the "app ID" field of the program: http://store.steampowered.com/agecheck/app/205100/
Without agecheck: http://store.steampowered.com/app/205100/

3) Click refresh to try to parse the installscript and search the application ID registry. If it was successful, it will show a list of prerequisite applications in the list box below.

4) Check all the unchecked boxes and start the application. Steam should no longer prompt to install anything. Note: If the prerequisite is, in fact, not installed, right-click on it and select Install to start the installer.


TitleAppIDPrerequisite (process if not obvious)VDF
Assassin's Creed III208480VCRedist, UplayLauncher, kb971512x86, kb971512x64
Command & Conquer 4: Tiberium Twilight47700.NET 3.5 SP1
Darksiders II50650DirectX
Dishonored205100PhysXRedist (msiexec)
Dungeons57650VC201057650_install.vdf
Dungeons: The Dark Lord200550VC2010200550_install.vdf
Endless Space208140
Far Cry Primal371660Microsoft .Net4, Vcredist2010WW
Hard Reset98400DirectX
Mafia II50130PhysX2
Space Engineers244850Coldstart
Warhammer 40,000: Dawn of War - Soulstorm9450DirectX (not installable because directory missing), VCRedistMFC, x86 SP1 (VC++ 2005), x64 SP1 (VC++ 2005)
Wasteland Angel46520MS VC++ 2010 Redist
If you know of an application that should be added to the list, post it or private message me. Please provide the title, app ID, and information about the bugged prerequisite in the message.
 

Attachments

Last edited:
Great idea! Anyway to make it work with new applications? I have about 20 instances of directX installed on my computer due to steam installing it for new games, even though I already have DirectX........
 
If you install the software but don't run it (needs the VDF file) and know the App ID, it should be able to tell Steam they are all installed before even running it. You have to remember to run Prerequisite Modifier for Steam prior to starting the game though.


Edit: For coders out there, the VDF parser is exposed in the binary if you wanted to use it in your own .NET application. It isn't completely finished though (no Write method) because I didn't see much use in finishing it. If someone has use of it, let me know and I'll finish it.
 
Last edited:
Updated to version 1.0.1 which fixes a bug where VDF file listed values before subkeys. This problem prevented the program from working correctly on Assassin's Creed III installscript.vdf (and likely others). It now works for changing AC3's prerequisites. I also added AC3 to the list of "applications known to be helpful on."
 
Updated to version 1.0.2 which fixes a bug where the end of the file doesn't terminate as expected and it would try to read data that did not exist. I noticed this issue on Mafia II installscript.vdf (Steam tries to install "PhysX2" every time the game runs). It should now be fixed.

Edit: If someone finds a game that has problems, attach the VDF you used to your post (probably have to zip it first) and provide the Steam App ID and I'll see if I can fix it.
 
Last edited:
Updated to version 1.0.3 which allows PMS to work on runasadmin.vdf where there was no "installscript" section. I also made it auto-fill the VDF location and App ID from command line parameters if given (simply put them in that order and quotes around the path if it has spaces).
 
Last edited:
Updated to 1.0.4 and squished some bugs:
-If the .VDF is not in the root game directory, it will try to work back to the root game directory for installing sake (which is based on the "installdir")
-Some code was properly case insensitive while other code was not causing errors on some .vdf files. It is now case insensitive in both locations.
-Application no longer crashes when trying to install something that doesn't exist. It will attempt to fix the install path first and failing that, spit out a descriptive message box of what it tried (it's probably pretty obvious why it failed looking at it).
-Caught some registry NullReferenceExceptions earlier on.

In working on this update, it has become pretty clear this needs a major rewrite because of Steam's move to .acf files to organize where applications are installed. When it does happen, you should be able to pick the game you want to modify out of a list of games and install scripts rather than having to manually find the install scripts and type in the App ID. Before I uploaded 1.4, there were only 100 downloads on 1.3 and it was up for two years. Unless there is a boom in interest in this application, I'll probably leave well enough alone.
 
Never heard of it. Poor advertising mate.
 
I don't advertise. The problem is that search engines aren't finding it. Or rather they are but they aren't prioritizing it so people aren't seeing it.

I think it could use a better name. Terms people would search for. The current name is too technical.
 
Maybe put a link in your sig so more people can find it.

What other programs have your written Ford?
 
Lots of them. Most are scattered on TPU.
 
Never heard of it myself until I checked what this thread was about. Would of helped me out in the past fighting Steam over redist. packages it kept trying to install/reinstall.

Thanks for the update Ford. :)

Steam App ID List: https://steamdb.info/apps/
 
Last edited:
Just updated the program to 1.0.5.0 to fix a pesky bug that presents itself in Space Engineers (and probably a lot of others).

Short version is that the devs created a new key in the registry and my program couldn't. It would give the impression of working but if you refreshed again after checking the box that it's installed, it would clear the box demonstrating that it wasn't actually installed. Now, if keys don't exist in the hive, it creates them anyway so when you check/uncheck the box, it can actually work as intended instead of thinking it did and not really doing it.


Two things I've contemplated changing but haven't yet:

1. Game names instead of AppIDs. Resolving game names involve downloading a file from Valve with options to refresh it because it gets out of date. Right now the program is portable. I would have to make it resident for the sake of saving bandwidth/cleanliness to resolve game names. It isn't much work to get the AppID from the store so not sure it is worth my time to implement.

2. Make it find all of the VDFs in the choosen directory instead of just the one VDF file picked. Yeah, it's annoying to have to search for *.vdf and go through them all but implementing this change is rather costly. It would involve changing the UI significantly, there's risk of name conflicts spanning VDFs (e.g. vcredist occurring repeatedly), and there's no way to know which VDFs Steam looks at and which it ignores (e.g. Space Engineers has five but only looks at four).
 
Last edited:
Great idea! Anyway to make it work with new applications? I have about 20 instances of directX installed on my computer due to steam installing it for new games, even though I already have DirectX........

Weird, never happened to me...
 
Weird, never happened to me...

You sure? Install a new Steam game and watch the dialog boxes that pass you by when you want to do the game's first startup. It goes through a vcredist process and checks DirectX.
 
You sure? Install a new Steam game and watch the dialog boxes that pass you by when you want to do the game's first startup. It goes through a vcredist process and checks DirectX.

"Checks" is different from "installs" tho, i don't have multiple instances of directx installed although i installed many games.
 
That's not the purpose of this program. I mean, you can install stuff using it that for some reason Steam didn't. For example, you did a clean install of the computer and the game refuses to run, you could use this program to look at what the game should install and force the install then check that it is installed and it would be like Steam did it; however, the main purpose of this tool is for games that work and every time you start it, it asks for admin credentials to install something it doesn't need or is already installed but for some reason didn't check the box that it was installed.

TL;DR: this program stops Steam from nagging you on game start.
 
There can only be two: DirectX and DirectX Redistributable. DirectX is the core engine which ships with the operating system. DirectX Redistributable is basically an SDK for DirectX 9 and below. Both cases overwrite when a newer version is installed.

How many installers do you have for these things? Probably one for almost every game. Steam is extremely wasteful in this regard.
 
I added a demonstration video to the original post which shows the symptom in Space Engineers (admin login box pops up), how to fix it with Prerequisite Modifier for Steam, and shows that it fixed the issue (no more admin login).
 
This app can be nicely extended with some kind of steam api connectivity https://steamcommunity.com/dev and https://developer.valvesoftware.com/wiki/Steam_Web_API

You can use OpenId library https://github.com/IdentityModel/IdentityModel.OidcClient2
to log-in app user into steam using http://steamcommunity.com/openid as a provider
and call GetOwnedGames https://developer.valvesoftware.com/wiki/Steam_Web_API#GetOwnedGames_.28v0001.29
to receive user's library for a nice game id lookup, scanning library for usual offenders, getting accurate install locations and so on ...
 
Last edited:
It already generates a list of AppIDs (I think it tears into one of the Steam VDF files) from the local machine to populate the dropdown list. I already have my own code for finding all of the installed libraries as well. I can do pretty much everything the Steam Web API does in this instance without requesting a key (which they might not give) and without injecting legalese in my program.

I could do a lot of things to improve this program but 1.0.4 was only downloaded 73 times before I updated it to 1.0.5. I'm not sure it's worth the effort to improve when it is used so rarely and this one gets the job done as is.
 
Last edited:
This really seems like something Steam, and truly every game installer should be doing already. How hard would it be to add a check to see if you already have an equivalent or newer version of DirectX or whatever else they're pushing before installing it for the hundredth time?
 
Back
Top