【问题标题】:Own file extension - Double click does not handle over file path自己的文件扩展名 - 双击不处理文件路径
【发布时间】:2015-01-02 13:42:04
【问题描述】:

我已经按照本教程创建了自己的文件扩展名: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”作为参数传递,我也尝试过,但没有任何改变。

提前致谢。

【问题讨论】:

    标签: c#


    【解决方案1】:

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

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

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

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

    【讨论】:

    • Main-method 没有提供任何参数,正如我在上面所写的。连续“Process.GetCurrentProcess().StartInfo.Arguments”为我提供了一个空字符串,所以基本上什么都没有。 "%1" 听起来很有趣,但也没有任何参数。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-20
      • 2019-04-22
      • 2016-08-07
      相关资源
      最近更新 更多