在运行时检测 MSIX 打包的应用程序

Detecting MSIX packaged application at runtime

我已将 WPF 应用程序打包为 MSIX,但同样的代码也可以打包为 ClickOnce 或无需任何包即可移植。在运行时检测使用了哪种打包技术(如果有)的最佳方法是什么?

编辑:我会尝试澄清一些事情,因为问题在没有任何评论的情况下得到了反对票。现有应用程序打包为 ClickOnce. We're trying to move it to MSIX which seams to be working just fine, but not whole user base will be migrated at once and we need compatibility with older packaging format too since "modern" way of packaging introduces a lot of limitations,应以不同方式处理。

是的,你可以用Windows.ApplicationModel.Package.Current看看你是不是运行打包的app。假设您使用的是 C#(但您也可以使用 C++ 等):

internal static bool IsPackaged()
{
  try
  {
    // If we have a package ID then we are running in a packaged context
    var dummy = Windows.ApplicationModel.Package.Current.Id;
    return true;
  }
  catch
  {
    return false;
  }
}

(来自 this Desktop Bridge sample)。