Can I move installed programs to another location in Windows?
If you're not too worried about the actual folder structure existing, you can move the folder anywhere you want and use a directory symbolic link to point to the new location (for example, if you have limited space on your system drive). The typical command line for this would be
mklink /d C:\Path\Of\Original\Folder D:\Path\Of\New\Folder
I am not aware of any tools that will actually move the folders and re-route and links and registry keys, as there are so many programs with constantly updating versions it would be very difficult to maintain.
EDIT: A request was made to add how to correctly delete the directory symbolic link. You do need to be careful with this as the wrong command could wipe the folder you have linked to.
The best methods are either:
- Delete the directory symbolic link through Windows Explorer. This will keep the target folder intact and only remove the symbolic link.
or
- Use the command
rmdir C:\Path\To\Symbolic\Link
Do not use the del
command on the location of your directory symbolic link, as the del
command is used to remove files. Doing this will follow the path to the destination directory, wiping out any files matching your criteria!
Building on Jonno's answer, If space is your concern, the symlink is your friend. there is a piece of software from back in the days when steam didn't let you install games outside the steam installation folder called steammover that automates the symlink creation, you point it to the folders containing programs you want moved (e.g. C:/Program Files) and a destination (e.g. D:/programs) and you can move specific files.
Moving/Installing those applications to another location can have unintended consequences.
There can be an entire set of assumptions the developers use that break if you move the program. For example, a application that installs itself on the user profile would expect full write access to it's install folder, or even worse use relative paths based of where it expects to be installed.
So the easiest solution (like others have said) is to just use a junction point to move the files wile letting the application thinking it's still in it's originally installed location (it will leave a "ghost" folder behind).
Anything more then that would require a per application analysis to see if anything breaks from moving it around, there's tools to help that analysis like the Windows ADK (Assessment and Deployment Kit) but it's not automated.
The easiest way I've found to do this is to use Link Shell Extension. It's an explorer shell extension that lets you manage symbolic and hard links without dropping to the command line.
In your case, you'd locate the folder that the installer forced you to use, move the files to the location you want them, right click the new location and choose "Pick Link Source", then go back to the original location and choose "Drop Link As..." and pick Junction (or Symbolic Link, though I usually use "Junction" because some applications will not follow the Symbolic Link).
I've used it for many of these kinds of scenarios -- often an application will impose a forced location for config and cache files (like %appdata%\MyProgram). On an SSD, if these files are written to constantly, it can reduce the life of that drive so I'll use this to move those cache files to a spindle drive, reducing performance slightly, but reducing wear on the SSD.
There is no universally guaranteed with to do this. There are multiple ways that different programs, particularly programs written in different languages, can check where the executable file is stored. Things like Symlinks may commonly be effective, but always know that there may be some exceptions that will break. If you move a file (such as the executable, but possibly some other file), some programs may expect to find a file in a specific location, and may behave differently (perhaps especially likely to just break entirely) if things are not as the program expects.
This is true for multiple operating systems.