c# - 在 Windows 启动时强制 ClickOnce 应用程序更新?
问题描述
我有一个 ClickOnce 应用程序,它应该在应用程序启动之前自动检查更新。如果我手动启动应用程序,这也可以完美运行。
但是,我还添加了一个注册表项以在 Windows 启动时启动应用程序,在这种情况下,不执行更新检查,并且应用程序启动就像没有更新一样 - 我猜是因为当应用程序启动时尚未建立与发布 ClickOnce 应用程序安装的网络驱动器的连接。
作为一种解决方法,我尝试在我的 MainWindow 已经加载后通过调用它来手动强制我的代码中的应用程序:
private void checkforupdate()
{
try
{
ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment;
if (ad.CheckForUpdate())
{
MessageBox.Show("Update available!");
ad.Update();
}
}
catch { }
}
但是由于某种原因,此代码仍然仅在我手动启动应用程序时触发更新,当它在 Windows 上自动启动时没有任何反应。我调用 checkforupdate 的代码部分是在已经从发布 ClickOnce 安装文件的同一驱动器加载了一些东西之后,因此必须在那时建立连接。
有谁知道该怎么做?
解决方案
好的,我发现我对 ClickOnce 应用程序的更新如何工作有一个严重的误解:在 Windows 启动时启动程序的注册表项中,我引用了神秘的 Users\AppData\Local 中的 .exe 文件\Apps\2.0.... 文件夹 - 虽然这当然可以用于启动应用程序本身,但它与更新功能本身没有任何关系。仅在参考桌面上的 ClickOnce 应用程序参考 (.appref-ms) 快捷方式时才会发生更新。
推荐阅读
- php - 使用 buildTree 生成所有可能分支的数组
- exchange-server - 使用 EWS API 创建会议时,会议室状态从“无响应”变为“接受”需要多长时间
- gcloud - 我可以同时使用服务帐户和用户凭据对 gcloud cli 进行身份验证吗?
- http - HTTP 请求与 RTC 电池消耗 ESP8266
- integration-testing - Apache Flink - 端到端测试如何终止输入源
- python - 如果用户未通过身份验证,如何限制 NGINX 提供媒体文件
- rtsp - 如何在 HTML5 中播放 RTP 流?
- javascript - Service Worker 发送两个请求
- excel - 带舍入的 Excel 日期计算
- java - 为什么当消费者线程全部退出时所有生产者线程也退出