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

Own file extension - Double click does not handle over file path

我已经按照本教程成功创建了自己的文件扩展名: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 已经为您处理成单独的值,因此在这里处理它更容易,即使您只是将它传递给另一个 class 或将它们存储在静态变量中。

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

好的,我明白了。我必须做的是在 ClassesRoot 中创建一个子项:"ProgramName\shell\open\command"。然后设置一个包含应用程序路径的值并将“%1”附加到它即可。