Why read this post?
Download the files mentioned in this post from here
We’ve all been there on an end users device with people complaining that their machine takes forever to start up. Nine times out of ten you will find that this is because they have a raft of unnecessary startup items not only starting up every time the device boots up, but constantly running all the time and potentially hogging valuable resources.
This was brought home to me recently when I rebuilt my laptop (after an annoying Windows wobbly was thrown… don’t ask!) and found that after installing only a fairly lean set of programs and drivers that I already had a load of arguably mostly useless stuff in my startup programs:
SunJavaUpdateSched (Java Updater)
QuickTime Task (Quicktime Task)
iTunesHelper (iTunes Helper)
Adobe Reader Speed Launcher (Adobe Reader Speed Launcher)
Adobe ARM (Adobe Reader and Acrobat Manager)
NvCplDaemon (Nvidia System Tray)
NvMediaCenter (Nvidia Multimedia Center)
NVHotkey (Nvidia Hotkeys)
OEM04Mon.exe (Webcam Utility)
CentraStage (CentraStage System Tray)
AVG_TRAY (AVG System Tray
BCSSync (Office 2010 Web Synchronise)
I decided that out of twelve startup items that only three were desirable to keep (CentraStage (obviously!), AVG_TRAY, BCSSync). The rest were just junk that I could do without.
This is fair enough to delete these on one device but on hundreds/thousands?!?… not easy. The main issue is that half of them get replaced with every software update meaning that it is a constant battle to keep these programs under control.
This was my call to arms…
I figured what I needed was something that was:
Here’s what I came up with:
This can be run in two ways:
Registry Root: HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
ValueData=”C:\Program Files\Microsoft Office\Office14\BCSSync.exe” /DelayServices
The ValueName is the value as stored in the registry under the key displayed in the Registry Root part of the output. The ValueData is the data contained within the value. The ValueData is not required for the removal part of the operation but is there to aid understanding of what the program may be associated with.
The output is in the format of an .ini file to make it easier to use with the second method of running:
Here is an example of the .ini file (setup.ini) that I used on my laptop:
[Adobe Reader Speed Launcher]
ValueName=Adobe Reader Speed Launcher
[Adobe Reader and Acrobat Manager]
[Nvidia System Tray]
[Nvidia Multimedia Center]
The section names (surrounded by ) are friendly names for the programs and can be whatever you want (although they must be unique or the script will get confused and take the value of the first one encountered each time). They don’t relate to the removal but are displayed in the output of the job. I have chosen to omit the ValueData key as returned by the first run method but it’s up to you if you leave it in for clarity. It has no bearing on the removal. It is important that the ValueName is the same as what is in the registry so copy/paste is preferable to avoid typos.
So to recap:
Function: Return startup items to StdOut but do not remove
Required files: StartupPrograms.exe
@ECHO PUSHD %~dp0 StartupPrograms.exe
Function: Remove all startup items from 32/64-Bit registry paths as specified in setup.ini file
Required files: StartupPrograms.exe, setup.ini
@ECHO PUSHD %~dp0 StartupPrograms.exe /R