.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
相关产品推荐
相关产品推荐

