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

.NET 6 WinForm ClickOnce无法获取ICO文件打开参数求助

解决.NET 6 WinForm ClickOnce发布后获取关联文件路径的问题

问题原因

.NET 6(及.NET Core 3.0+)已不再支持AppDomain.CurrentDomain.SetupInformation.ActivationArguments,ClickOnce的激活参数获取方式已更新,因此原代码会报错。

解决方案步骤

1. 引用必要的NuGet包

右键项目→管理NuGet程序包,搜索并安装System.Deployment.Application,这是获取ClickOnce激活参数的必要依赖。

2. 修改Main方法获取参数

替换原参数逻辑,改用适配.NET 6的ClickOnce参数获取方式:

using System.Deployment.Application;
using System.Linq;
using System.Windows.Forms;

namespace YourAppNamespace
{
    internal static class Program
    {
        [STAThread]
        static void Main()
        {
            ApplicationConfiguration.Initialize();
            
            string[] args = Array.Empty<string>();
            
            // 判断是否为ClickOnce部署激活
            if (ApplicationDeployment.IsNetworkDeployed)
            {
                var activationData = AppDomain.CurrentDomain.SetupInformation.ActivationArguments?.ActivationData;
                if (activationData != null && activationData.Length > 0)
                {
                    // 将URI格式的路径转为本地文件路径
                    args = activationData.Select(uri => new Uri(uri).LocalPath).ToArray();
                }
            }
            else
            {
                // 非ClickOnce模式下仍读取命令行参数
                args = Environment.GetCommandLineArgs().Skip(1).ToArray();
            }
            
            Application.Run(new Form1(args));
        }
    }
}

3. 完善ClickOnce文件关联配置

你的ClickOnceProfile.pubxml可补充必要配置项,确保关联生效:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <FileAssociation Include=".ico">
      <Visible>False</Visible>
      <Description>ICO文件编辑器</Description>
      <Progid>YourApp.IcoEditor</Progid>
      <DefaultIcon>Resources\ico.ico</DefaultIcon>
      <Extension>.ico</Extension>
      <ContentType>image/x-icon</ContentType>
    </FileAssociation>
  </ItemGroup>
</Project>

4. 保留Form1的参数处理逻辑

维持原构造函数逻辑即可:

public Form1(string[]? args)
{
    InitializeComponent();
    if (args != null && args.Length > 0)
    {
        string filepath = args[0];
        // 此处添加你的ICO文件编辑逻辑
    }
}

额外注意事项

  • 必须安装发布后的ClickOnce应用才能测试关联功能,IDE直接运行不属于ClickOnce激活模式,无法触发参数传递。
  • 若安装后文件关联未自动生效,可前往Windows设置→应用→默认应用→按文件类型选择默认应用,手动指定你的应用打开.ico文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 07:16:29