【问题标题】:Passing file path to app after double click on file双击文件后将文件路径传递给应用程序
【发布时间】:2021-09-01 12:53:04
【问题描述】:

在将某个文件设为某些文件扩展名的默认应用程序后,我正在尝试使用我自己的 Windows Forms C# 程序打开一个文件。

从 Stack Overflow 和其他网站我发现,在这种情况下,windows 将文件路径作为命令行参数传递,所以理论上文件路径应该在 args[0] 中,但我在那里找不到。

在将文件图标拉到 app.exe 的情况下,一切都很好,文件路径可以在参数列表中找到。此外,还提出了在特定注册表文件夹中使用应用程序路径和“%1”创建注册表记录。我检查了我的注册表并且记录在那里。

也许我错过了一些简单的东西?类似主题中的大多数答案都是关于 args[0]。但不幸的是,这不是我的情况。

main.cs

中的示例代码
static void Main(string[] args)
    {
       if (args.Length != 0 && File.Exists(args[0]))
       {
         fileName = args[0];
         doSmth(filename);
       }
    }

【问题讨论】:

  • 您好,欢迎来到 SO!您能否更新您的帖子以包含Minimal, Reproducible Example?目前我们不知道您尝试了什么以及什么不起作用,为了帮助我们,请详细提供您尝试过的内容。
  • 在运行您的应用程序并双击相关文件类型的文件后,检查 Windows 任务管理器以获取应用程序的命令行(详细信息选项卡 + 您可能需要手动显示相应的列)。您是否在此处的命令行参数中看到所选文件的路径?
  • @Serg 不,他们不在那里
  • 如果任务管理器中没有路径,那么问题不在你的C#代码,而是在文件类型注册。除了将注册表与其他(工作)文件类型进行比较之外,我不知道如何进一步诊断。
  • @serg 再次感谢您的回答。它帮助很大。事实证明,在测试应用程序评估期间,我将不带“%1”的应用程序链接传递给我的 ftype 参数

标签: c# windows


【解决方案1】:

ftype 的值导致了这个问题。在使用“打开方式”之前,我使用 assocftype 手动将我的应用设置为默认值。事实证明,为了将文件路径正确传递给您的应用程序,您需要在链接末尾有一个“%1”。
如果您手动创建自定义 ftype 变量,它们将覆盖注册表链接
你的 ftype 变量应该是这样的:

ftype custom_var=link_to_app %1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-26
    相关资源
    最近更新 更多