I think you need to make the following changes:
Change
sei.lpVerb = L"runas";
to:
sei.lpVerb = NULL;
std::wstring wDistribution = L"Debian"; // Make sure case matches exactly, you can run wsl --list --verbose to find out
Make sure your application is compiled for x64, not x86.
Change:
WaitForSingleObject(sei.hProcess, 2000);
To:
WaitForSingleObject(sei.hProcess, 10000);
I ran your program with the above changes on my machine (which has WSL Ubuntu) and it appeared to work. Take a look at a relevant stackoverflow question.