I don't know why it would be
"hit and miss" in your case.
More information on the specific thing you were trying to do would be needed
(although that would be more of a general Windows issue/question).
The shell functionality is more generic so it lets you request things like opening a spreadsheet or emailing, without necessarily knowing which applications are assigned to such tasks.
One possible limitation of Shell functionality is that security restrictions for a user or session may not let some or all shell requests execute.
The RunApplication() function should work more predictably assuming a user has permission to launch new applications from existing applications.
But you will likely need to know the exact application name and where it
has been installed.