【问题标题】:Using ClickOnce to automatically update company application with personal FTP server使用 ClickOnce 使用个人 FTP 服务器自动更新公司应用程序
【发布时间】:2026-01-23 03:35:02
【问题描述】:

这是我的第一个 Stack Overflow 问题,如果这不是很好,敬请见谅......

我确定这是我缺少的超级简单的东西,或者是我自己陷入的非常复杂的东西,但我第一次使用 ClickOnce 为我开发的公司应用程序创建自动更新程序。

应用程序本身最初是用 VB 编写的,但我已将其翻译成 C#。我们使用它来自动化资产数据库,该数据库变化非常频繁。我的任务是让它完成自动更新,以免让一些技术人员混淆每周卸载/重新安装应用程序。

我自愿使用我在家里使用的个人服务器机器制作 FTP 服务器。通常这台机器会用于本地网络,但我想创建一个 FTP 服务器已经有一段时间了(这也是我的第一个 FTP 服务器)。

所以我继续前进,将构建的发布位置设置为 ftp://[IP.ADDRESS]:21/Folder/Subfolder,将安装文件夹 URL 设置为 http://[IP.ADDRESS]:21/Folder/Subfolder

长话短说,当我尝试测试更新(仅更改程序集版本)时,我出错了:

System.Deployment.Application.DeploymentDownloadException:下载 http://[IP.ADDRESS]:21/Folder/Subfolder/applciation.application 未成功 ---> System.Net.WebException:服务器违反协议.

我做了一些研究并尝试添加 SSL 证书并将更新路径更改为 https://[IP.ADDRESS]:21/Folder/Subfolder/ 然后对其进行了测试。这一次,我得到了这个错误:

System.Deployment.Application.DeploymentDownloadException:下载 http://[IP.ADDRESS]:21/Folder/Subfolder/applciation.application 未成功 ---> System.Net.WebException:底层连接已关闭:发送时发生意外错误。 --> System.IO.IOException: 由于格式异常,握手失败。

我不知道这是进步还是我在这里倒退了哈哈。我一直在跳来跳去,去很多线程试图找出哪里出了问题。我也很难确定这是否是我设置 ClickOnce 的错误,或者这是否是我使用 IIS 设置 FTP 的错误。

如果信息不足,我深表歉意,如有必要,我可以提供更多信息。如果信息太多,也很抱歉!任何帮助或指导表示赞赏!

【问题讨论】:

  • 不清楚为什么需要每周卸载/重新安装应用程序,或者为什么需要每周“更新”应用程序——这似乎是糟糕的设计。
  • 以下内容可能会有所帮助:How to: Download files with FTP
  • @user9938 它每周更新一次,因为它们会更改与每种资产类型相关的资产类型和合同。程序本身会更新这些资产并将它们加载到数据库中。他们想经常更改它的选项

标签: c# ftp clickonce


【解决方案1】:

我猜您正在为一家小公司工作,并且基础设施/资源非常宝贵。考虑到这一点,我将提供一些建议:

  1. 贵公司有网络共享驱动器吗?我不喜欢 ClickOnce,但我过去成功地将其部署到网络共享。这样做的好处是您无需处理安全问题。
  2. 您是否考虑过将其迁移到 Web 应用程序?当我还是一名原生应用程序开发人员时,Web 开发似乎真的令人生畏,但使用 Blazor 和 ASP.NET Core,它变得更易于访问。这将完全消除更新应用程序的需要。
  3. 考虑另一种部署路线。 ClickOnce 并没有得到很好的支持。

如果我没有在安全方面发出危险信号,我将失职。 FTP 是一个非常古老的协议,设计上基本上是不安全的。将其托管在您的家庭服务器上意味着您正在通过公共互联网传输应用程序...如果您公司以外的人安装了该应用程序会怎样?

【讨论】:

  • 感谢您的反馈!非常感谢!你说得对,我工作的公司是一家相当小的 IT 公司。我们确实有一个网络驱动器,所以我可能会将其视为一个选项!但是我一直想用 ASP.NET 做更多的事情,所以我可能会尝试这个想法!谢谢!