我工作的地方之一,我们的应用程序是一个.NET核心WPF应用程序,我们切换到使用桌面桥最近。我们注意到,如果用户使用“开始”菜单中的“瓷砖”创建桌面快捷方式或任务栏快捷方式,然后从所述快捷方式启动应用程序,则应用程序将跳过检查更新(即使指定它检查.appinstaller文件中的更新)。这款应用程序打开后似乎也不会在后台查看更新,因为在用户重新启动后,它仍然保持在相同的版本上。
注意:该应用程序确实会更新,并在从“开始”菜单启动应用程序时,通过“活”块或“开始”菜单条目显示提示。我们已经证实,所有的用户和我们的开发机器都在使用Windows 10版本1903。
以下是appinstaller的模板文件的示例:
<?xml version="1.0" encoding="utf-8"?>
<AppInstaller Uri="{AppInstallerUri}"
Version="{Version}"
xmlns="http://schemas.microsoft.com/appx/appinstaller/2018">
<MainBundle Name="{Name}"
Version="{Version}"
Publisher="{Publisher}"
Uri="{MainPackageUri}"/>
<UpdateSettings>
<OnLaunch HoursBetweenUpdateChecks="0" ShowPrompt="true" UpdateBlocksActivation="true"/>
<AutomaticBackgroundTask/>
<ForceUpdateFromAnyVersion>true</ForceUpdateFromAnyVersion>
</UpdateSettings>
</AppInstaller>我在微软的MSIX GitHub回购上问过这个问题,但他们没有回应。在这一点上,我们想知道这里是否还有其他人遇到过这个问题,他们是否能够找到解决办法或解决方法?我们是否需要在.appxmanifest文件中添加一些内容,或者在.appinstaller文件中遗漏了什么?
编辑 同样的问题也出现在MSIX论坛上,最有可能的是MSFT会在那里回答。
编辑2
我们还收到了微软对此的回应,内容涉及Github和VS Developer社区。他们说他们会调查的。如果他们有更多的信息,我会再更新一次,或者发布他们的回复。
发布于 2019-10-16 03:13:10
微软能够对我们的门票做出回应,他们告诉我们,目前Windows 10 (1903年)不支持从传统快捷方式(桌面/任务栏)启动应用程序时运行更新程序。建议的解决方法是从“开始”菜单或活瓷砖启动:
https://github.com/MicrosoftDocs/msix-docs/issues/59
更新:
Tanaka Jimha / Huios为我们提供了一项关于使用Windows10API之一的工作:https://github.com/MicrosoftDocs/msix-docs/issues/59#issuecomment-542927336。
要使用它,您必须引用通常的Windows 10程序集,您可以手动或通过NuGet完成这些操作。您可以在这里找到如何做到这一点的文档:https://learn.microsoft.com/en-us/windows/apps/desktop/modernize/desktop-to-uwp-enhance
注意:如果您正在使用Rider或Resharper,我建议您将它们更新到2019.2.3,如果您打算在与XAML视图相同的项目中使用这些程序集。早期版本的.NET Core3.0WPF应用程序有一个bug,其中UWP库中的名称空间和类会导致奇怪的bug,比如XAML智能感知,比如网格、用户控制、窗口、堆栈面板等等。
在添加了它们之后,可以继续使用Windows.Management.Deployment命名空间中的API。下面是一些快速而肮脏的代码,向您展示如何使用它,但是您当然可以尝试和/或参考上面链接中的Tanaka示例:
这将使用当前安装的应用程序包中的URI来查看是否有任何新版本的URI保存在安装程序中。我可能应该指出,为了保持一切正常,您应该确保包的名称保持一致。
这样做有很多不同的方法,但我找到了一种简单的方法来处理,那就是为应用程序安装程序项目使用项目文件中的AppPackageName元素,以确保每次发布后文件夹的名称是相同的。
其次,要真正获得更新并下载并安装它,您可以这样做:
public static async Task<bool> GetUpdates(string uriToUse)
{
try
{
var packageManager = new PackageManager();
var uri = new Uri(uriToUse);
await packageManager.UpdatePackageAsync(uri, null, DeploymentOptions.ForceApplicationShutdown);
return true;
}
catch (Exception e)
{
//Log the exception, or do something else, up to you
return false;
}
}上面的尝试追赶是存在的,因为如果有什么东西阻止UpdatePackageAsync下载更新,它就会抛出一个异常。这可能是由许多因素造成的(例如,已经安装了更新,证书错误等等)。这就是为什么您可能希望在运行更新之前先在当前包上使用CheckUpdateAvailabilityAsync()。
不管怎么说,希望这将证明这对其他人有用,而微软还没有发布涵盖传统应用快捷方式的Windows更新。
发布于 2019-10-14 08:12:36
关于属性ShowPrompt和ForceUpdateFromAnyVersion,您需要指向xaml中的模式- xmlns="http://schemas.microsoft.com/appx/appinstaller/2018"。它们在1903年的版本上有售。因此,如果您的版本不是1903年,您可以删除这两个属性。
发布于 2022-07-25 16:40:59
是否有办法将http://schemas.microsoft.com/appx/appinstaller/2017/2更改为http://schemas.microsoft.com/appx/appinstaller/2018?我知道这有点离谱,但我不知道如何“更新”这个版本。我有自动构建系统,我已经将所有引用的包和项目的目标版本更新为强制版本(最小目标: win 10版本1903)。.appinstaller文件将自动生成。然后是一个签名操作并发布到azure。虚拟环境是windows-2022。.appinstaller名称空间总是2017/2,我真的不知道为什么。
https://stackoverflow.com/questions/58345859
复制相似问题