Is there a way to run a file by its association while directing its stdout?

I can do:

using (var process = new Process()) {
    process.StartInfo.FileName = executable;
    process.StartInfo.Arguments = arguments;
    process.StartInfo.UseShellExecute = false;
    process.StartInfo.CreateNoWindow = true;
    //process.StartInfo.Verb = "Open";
    process.StartInfo.RedirectStandardOutput = true;
    process.StartInfo.RedirectStandardError = true;



But then I have to look for its association (AssocQueryString), parse the association string, which can be quite complicated, like:

"%systemroot%\system32\mspaint.exe" /pt "%1" "%2" "%3" "%4"


C:\Python27\python.exe "%1" %*

Then split to executable part, expand it using Environment.ExpandEnvironmentVariables(exeFile), then replace all percentages with parsed argmunets, and so on.

In few cases the association string can be very odd, such as (note all the slashes - who knows if it even works...):

\"C:\Program Files\Microsoft\R Client\R_SERVER\\\bin\\x64\\RGui.exe\" \"%1\"

I can use the obsolete WinExec or ShellExecute, but then I can't redirect stdout/stderr.

Calling CreateProcess works basically like C#'s new Process(): MSDN states that

... Note that this function does not search the per-application path specified by the App Paths registry key.

So am I doomed to do all the work on my own? no easier solution?