From e3bd932ff6e17bd5f3ebfb48b5c27a261a5bae81 Mon Sep 17 00:00:00 2001 From: Chase Payne Date: Sun, 17 Sep 2023 14:36:04 -0500 Subject: [PATCH] Allow Desktop Streams if Prep Commands fail due to user not being logged in (#1207) --- src/process.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/process.cpp b/src/process.cpp index d018f475..77105801 100644 --- a/src/process.cpp +++ b/src/process.cpp @@ -180,14 +180,19 @@ namespace proc { auto child = platf::run_command(cmd.elevated, true, cmd.do_cmd, working_dir, _env, _pipe.get(), ec, nullptr); if (ec) { - BOOST_LOG(error) << "Couldn't run ["sv << cmd.do_cmd << "]: System: "sv << ec.message(); - return -1; + auto msg = ec == std::errc::no_such_process ? "no active user sessions available" : ec.message(); + BOOST_LOG(error) << "Couldn't run ["sv << cmd.do_cmd << "]: System: "sv << msg; + // We don't want any prep commands failing launch of the desktop. + // This is to prevent the issue where users reboot their PC and need to log in with Sunshine. + // no_such_process is returned when the impersonation fails, which is typically when there is no user session active. + if (!(_app.cmd.empty() && ec == std::errc::no_such_process)) { + return -1; + } } child.wait(); auto ret = child.exit_code(); - - if (ret != 0) { + if (ret != 0 && ec != std::errc::no_such_process) { BOOST_LOG(error) << '[' << cmd.do_cmd << "] failed with code ["sv << ret << ']'; return -1; }