You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6.0 ClickOnce部署:更新时如何添加桌面图标?

.NET 6 ClickOnce更新时自动创建桌面图标解决方案

可以继续使用ClickOnce部署.NET 6应用,无需更换发布方式,以下是替代原ApplicationDeployment API的实现方案:

核心思路

由于.NET 6+移除了System.Deployment.Application命名空间的API,我们通过手动记录应用版本来判断是否为更新后的首次运行,再通过复制开始菜单中的ClickOnce快捷方式到桌面实现需求。

实现步骤

1. 编写版本检查与快捷方式创建逻辑

Imports System.Reflection
Imports System.IO

Private Sub HandleDesktopIconOnUpdate()
    ' 获取当前应用程序集信息
    Dim entryAssembly = Assembly.GetEntryAssembly()
    If entryAssembly Is Nothing Then Return

    Dim currentVersion = entryAssembly.GetName().Version.ToString()
    Dim companyAttr = entryAssembly.GetCustomAttribute(Of AssemblyCompanyAttribute)()
    Dim productAttr = entryAssembly.GetCustomAttribute(Of AssemblyProductAttribute)()
    Dim companyName = companyAttr?.Company
    Dim productName = productAttr?.Product

    If String.IsNullOrEmpty(companyName) Or String.IsNullOrEmpty(productName) Then Return

    ' 定义存储版本记录的路径(用户AppData目录下的应用专属文件夹)
    Dim appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
    Dim versionRecordPath = Path.Combine(appDataPath, companyName, productName, "version.txt")
    Dim isUpdateFirstRun = False

    ' 检查版本记录
    If File.Exists(versionRecordPath) Then
        Dim storedVersion = File.ReadAllText(versionRecordPath).Trim()
        If storedVersion <> currentVersion Then
            isUpdateFirstRun = True
        End If
    Else
        ' 首次安装场景兼容
        isUpdateFirstRun = True
    End If

    ' 如果是更新后首次运行,创建/更新桌面图标
    If isUpdateFirstRun Then
        ' 开始菜单中ClickOnce快捷方式的路径
        Dim startMenuShortcutPath = Path.Combine(
            Environment.GetFolderPath(Environment.SpecialFolder.Programs),
            companyName,
            $"{productName}.appref-ms"
        )

        ' 桌面快捷方式目标路径
        Dim desktopShortcutPath = Path.Combine(
            Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
            $"{productName}.appref-ms"
        )

        ' 复制快捷方式到桌面(覆盖已存在的旧图标)
        If File.Exists(startMenuShortcutPath) Then
            File.Copy(startMenuShortcutPath, desktopShortcutPath, True)
        End If

        ' 更新版本记录
        Directory.CreateDirectory(Path.GetDirectoryName(versionRecordPath))
        File.WriteAllText(versionRecordPath, currentVersion)
    End If
End Sub

2. 在应用启动时调用该方法

在Program.Main或主窗体的Load事件中调用HandleDesktopIconOnUpdate方法,确保每次启动都执行检查逻辑。

注意事项

  • 确保应用具有访问用户AppData和桌面目录的权限(ClickOnce信任应用默认具备该权限)
  • 发布更新时,需确保程序集版本号递增(VS发布设置中勾选"自动递增修订号"即可)
  • 若应用名称或公司名称有变更,需调整代码中对应属性的获取逻辑

内容的提问来源于stack exchange,提问作者Pawel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 05:05:45