自己的文件扩展名 - 双击不会处理文件路径

本文关键字:文件 处理 路径 双击 扩展名 自己的 | 更新日期: 2023-09-27 18:36:08

我设法按照本教程创建了自己的文件扩展名:http://www.codeproject.com/Articles/17023/System-File-Association

到目前为止,它运行良好。我只有一件事无法解决。当我双击具有该扩展名的文件时,我的程序会打开。现在,我想在我的程序中执行一个操作。我在这里浏览了一些线程,并读到文件路径会自动传递给启动参数。

问题是没有传递单个参数,还有Process.GetCurrentProcess()。StartInfo.FileName 返回一个空字符串。我认为这是连续的,因为我在双击文件时不会传递任何参数。

这是我的代码:

var fai = new FileAssociationInfo(".extension");
if (!fai.Exists)
{
   try
   {
      fai.Create("My Extension Program");
      var pai = new ProgramAssociationInfo(fai.ProgId);
      if (!pai.Exists)
      {
          pai.Create("My Program File",
          new ProgramVerb("Open", Application.ExecutablePath);
          pai.DefaultIcon = new ProgramIcon(Application.ExecutablePath);
      }
    }
 }

如您所见,我只传递应用程序的路径来打开它。但是我现在如何将文件路径作为参数传递?我已经看到例如文章的作者将"%1"作为参数传递,我也尝试过,但没有任何变化。

提前谢谢。

自己的文件扩展名 - 双击不会处理文件路径

ProcessStartInfo.FileName通常会为您提供程序可执行文件本身的路径,而不是在Windows资源管理器中单击的文件,因此在您的情况下检查这似乎是错误的事情。

如果你想使用当前Process获取参数,那么Process.GetCurrentProcess().StartInfo.Arguments应该给你一个字符串,其中包含传递给程序的所有参数。如果有多个参数,则需要自己将这些参数解析为单独的值。

但是获取参数的标准、更简单的方法是确保程序的Main()方法具有签名static void Main(string[] args){}args已经为您处理成单独的值,因此即使您只将其传递给另一个类或将它们存储在静态变量中,在这里处理它也会更容易。

%1应确保单击的文件作为第一个参数(args[0])传递给程序。

嗯,我知道了。我要做的就是在ClassesRoot中创建一个子项:"ProgramName''shell''open''command"。然后设置一个包含应用程序路径的值,并将"%1"附加到该值,您就完成了。