std::filesystem::weakly_canonical only returns an absolute path when a leading
element of its input exists, so a relative path naming a file that has not been
created yet is returned unchanged, still relative. The service then rejects it
with "Path is not absolute". This affected `wslc build --iidfile <relative>` and
`--secret src=<relative>`, plus the distribution path and virtiofs share path
helpers in the service. Add wsl::windows::common::filesystem::GetCanonicalPath,
which applies std::filesystem::absolute first so the result is absolute whether
or not the path exists, and replace the direct weakly_canonical calls with it.
It checks the error from absolute before canonicalizing, because absolute
returns an empty path on failure and weakly_canonical both succeeds on an empty
path and clears the error_code on success, so nesting the two calls would
discard the failure and report success
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>