自己的文件扩展名 - 双击不会处理文件路径
本文关键字:文件 处理 路径 双击 扩展名 自己的 | 更新日期: 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"附加到该值,您就完成了。