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

C# 自己的文件扩展名-双击不处理文件路径,c#,C#,根据本教程,我已成功创建了自己的文件扩展名: 到目前为止,它工作得很好。我只有一件事不能解决。 当我双击具有该扩展名的文件时,我的程序就会打开。现在,我想在我的程序中执行一个操作。我在这里浏览了一些线程,读到文件路径自动传递给启动参数 问题是没有传递单个参数,Process.GetCurrentProcess().StartInfo.FileName也返回了一个空字符串。我认为这是连续的,因为双击文件时我不传递任何参数 这是我的代码: var fai = new FileAssociationI

根据本教程,我已成功创建了自己的文件扩展名:

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

问题是没有传递单个参数,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”作为参数传递,我也尝试过,但没有任何改变

提前感谢。

通常为您提供程序可执行文件本身的路径,而不是在Windows资源管理器中单击的文件,因此在您的案例中检查这一点似乎是错误的

如果要使用当前的
进程
获取参数,则应提供一个包含传递给程序的所有参数的字符串。如果有多个参数,您需要自己将这些参数解析为单独的值

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


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

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

Main方法没有提供任何参数,正如我上面所写的。连续地“Process.GetCurrentProcess().StartInfo.Arguments”为我提供了一个空字符串,所以基本上什么都没有。“%1”听起来很有趣,但也没有任何参数。