+#include "../../../ShellPkg/Application/Shell/Shell.h"
This relative search path should not be needed. Does #include <Protocol/EfiShell.h> not do what you need?
There is need for function, which provides possibility to run Shell Command. In Library/ShellLib.h there is declaration of ShellExecute, which brings such functionality, but it isn't working properly in our case - no matter what command string is provided, it always fails with EFI_INVALID_PARAMETER. On the other hand there is RunShellCommand in ShellPkg/Application/Shell/Shell.h (it is internal, that's why relative path is used) which works properly.
Main difference between them is that ShellExecute creates nested instance of the shell and then executes command, while RunShellCommand process command line in current shell.