rocksdanister/lively · error · InvalidOperationException
msix not supported.
Error message
msix not supported.
What it means
Thrown by AppUpdateServer.SwitchReleaseChannel when PackageUtil.IsRunningAsPackaged is true. Channel switching works by downloading an Inno Setup .exe and launching it with /SILENT, which an MSIX/AppContainer install cannot do, so the server refuses up front with InvalidOperationException. That exception is then caught by the method's outer catch and re-raised to the client as RpcException(StatusCode.Internal).
Source
Thrown at src/Lively/Lively/RPC/AppUpdateServer.cs:95
Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new ThreadStart(delegate
{
MessageBox.Show($"{Properties.Resources.LivelyExceptionAppUpdateFail}\n\nException:\n{ex}", Properties.Resources.TextError, MessageBoxButton.OK, MessageBoxImage.Error);
}));
}
}
catch (Exception ex)
{
Logger.Error(ex);
}
return Task.FromResult(new Empty());
}
public override async Task<Empty> SwitchReleaseChannel(SwitchReleaseChannelRequest request, ServerCallContext context)
{
try
{
if (PackageUtil.IsRunningAsPackaged)
throw new InvalidOperationException("msix not supported.");
var isRequestedBetaChannel = request.Channel == ReleaseChannel.Beta;
var isCurrentBetaChannel = Constants.ApplicationType.IsTestBuild;
if (isCurrentBetaChannel && isRequestedBetaChannel || !(isCurrentBetaChannel || isRequestedBetaChannel))
return await Task.FromResult(new Empty());
var (SetupUri, SetupFileName, _) = await updater.GetLatestRelease(isRequestedBetaChannel);
var filePath = Path.Combine(Constants.CommonPaths.TempDir, SetupFileName);
await downloader.DownloadFile(SetupUri, filePath, null, context.CancellationToken);
// Run setup in silent mode.
Process.Start(filePath, "/SILENT /CLOSEAPPLICATIONS /RESTARTAPPLICATIONS");
// Inno installer will auto retry, waiting for application exit.
App.QuitApp();
}
catch (Exception ex)
{View on GitHub (pinned to c1036feb66)
Solutions
- Use the non-MSIX desktop build, which can run the Inno installer and switch channels.
- Hide the release-channel switch in the UI when PackageUtil.IsRunningAsPackaged is true.
- For MSIX, switch channels through the Store/MSIX deployment mechanism instead of an Inno installer.
Example fix
// before
if (PackageUtil.IsRunningAsPackaged)
throw new InvalidOperationException("msix not supported.");
// after: map to a gRPC FAILED_PRECONDITION so the client can show a precise message
if (PackageUtil.IsRunningAsPackaged)
throw new RpcException(new Status(StatusCode.FailedPrecondition,
"Channel switching is not supported in the MSIX/Store build.")); Defensive patterns
Strategy: validation
Validate before calling
if (PackageUtil.IsRunningAsPackaged)
{
DialogService.Warn("Release-channel switching requires the desktop build.");
return;
}
await client.SwitchReleaseChannelAsync(new SwitchReleaseChannelRequest { Channel = request.Channel }); Type guard
static bool CanSwitchReleaseChannel() => !PackageUtil.IsRunningAsPackaged;
Try / catch
try
{
await client.SwitchReleaseChannelAsync(req);
}
catch (RpcException ex) when (ex.Status.Detail.Contains("msix"))
{
Logger.Warn(ex, "Channel switch blocked on MSIX build.");
} Prevention
- Gate the channel-switch UI on !PackageUtil.IsRunningAsPackaged so the option is invisible in Store builds.
- Return a precise gRPC status (FailedPrecondition) instead of generic Internal so the client can branch cleanly.
- Document that Store builds must use the Store for channel/version changes.
When it happens
Trigger: A gRPC client calls SwitchReleaseChannel while Lively is installed/running as an MSIX package (PackageUtil.IsRunningAsPackaged == true).
Common situations: User installed the Store (MSIX) build and clicks 'switch to beta/stable' in the UI. The client code is shared between desktop and Store builds but only the desktop build can switch channels via the Inno installer.
Related errors
- ex.Message
- Program wallpaper on MSIX package not allowed.
- xaml island gif player not available.
- Wallpaper player not found.
AI-assisted analysis of rocksdanister/lively@c1036feb66 (2026-08-13).
Data as JSON: /api/errors/a653bd52f009828b.
Report an issue: GitHub.