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

如何检测C# WinForms应用是否通过文件启动并获取文件名

在C#中检测程序是否通过拖拽文件启动并获取文件名

当你将文件拖拽到EXE上启动程序时,系统会把拖拽的文件路径作为命令行参数传递给程序,不需要依赖Form的特定加载事件,直接读取命令行参数即可实现需求。

核心实现思路

  1. 获取命令行参数:使用Environment.GetCommandLineArgs()方法,返回的字符串数组中,第一个元素是程序自身的路径,后续元素就是拖拽的文件路径(支持同时拖拽多个文件)。
  2. 判断是否存在拖拽文件:检查数组长度是否大于1,长度为1时说明没有额外启动参数(即未通过拖拽文件启动)。
  3. 在WinForm中处理参数:可以在Program.cs的Main方法中先解析参数,再传递给Form;也可以直接在Form的Load事件中读取参数。

代码示例

方式1:在Main方法中提前处理参数

static void Main(string[] args)
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    List<string> draggedFiles = new List<string>();
    if (args.Length > 0)
    {
        // 跳过第一个元素(程序自身路径),收集所有拖拽的文件
        draggedFiles = args.Skip(1).ToList();
    }

    // 将文件列表传递给Form
    Application.Run(new MainForm(draggedFiles));
}

对应的Form代码:

public partial class MainForm : Form
{
    private readonly List<string> _draggedFiles;

    public MainForm(List<string> draggedFiles)
    {
        InitializeComponent();
        _draggedFiles = draggedFiles;
    }

    private void MainForm_Load(object sender, EventArgs e)
    {
        if (_draggedFiles.Count > 0)
        {
            // 示例:显示所有拖拽的文件路径
            MessageBox.Show("检测到拖拽的文件:\n" + string.Join("\n", _draggedFiles));
        }
    }
}

方式2:直接在Form的Load事件中读取参数

如果不需要在Main方法中提前处理,也可以直接在Form加载时读取:

private void MainForm_Load(object sender, EventArgs e)
{
    string[] args = Environment.GetCommandLineArgs();
    if (args.Length > 1)
    {
        List<string> draggedFiles = args.Skip(1).ToList();
        // 这里可以根据需求处理文件,比如显示文件名、读取文件内容等
        foreach (string filePath in draggedFiles)
        {
            listBoxFiles.Items.Add(Path.GetFileName(filePath));
        }
    }
}

补充说明

  • 若需要支持双击关联文件启动程序(比如双击txt文件打开你的EXE),需要在系统中设置文件关联,此时程序同样会通过命令行参数接收文件路径,上述代码同样适用。
  • 不要局限于Form的加载事件,命令行参数是程序启动时的全局输入,和UI组件的事件没有直接绑定关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:15:33