在 Windows 启动时强制更新 ClickOnce 应用程序?
Forcing ClickOnce application update on Windows Startup?
我有一个 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 启动时启动程序的注册表项中,我提到了 .exe神秘的 Users\AppData\Local\Apps.0.... 文件夹中的文件 - 虽然这当然适用于启动应用程序本身,但它与更新功能本身没有任何关系。
更新仅在引用桌面上的 ClickOnce 应用程序参考 (.appref-ms) 快捷方式时发生。
我有一个 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 启动时启动程序的注册表项中,我提到了 .exe神秘的 Users\AppData\Local\Apps.0.... 文件夹中的文件 - 虽然这当然适用于启动应用程序本身,但它与更新功能本身没有任何关系。 更新仅在引用桌面上的 ClickOnce 应用程序参考 (.appref-ms) 快捷方式时发生。