c#从关联文件类型加载数据

本文关键字:加载 数据 类型 文件 关联 | 更新日期: 2023-09-27 18:07:31

我创建了自己的文件类型(.track),并且能够在我的解决方案的发布选项中设置关联。安装我的程序后,双击任何。track文件打开我的应用程序。当发生这种情况时,我希望程序加载已双击的文件的内容。

    public static void Main(string[] args)
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        if(args.Length == 1)
        {
            MessageBox.Show(args[0]); //For Debugging
            Application.Run(new TrackerForm(args[0]));
        }
        else
        {
            MessageBox.Show(args.Length.ToString()); //Confirms that no arguments are passed.
            Application.Run(new TrackerForm());
        }
    }

我假设双击文件的路径将通过命令行参数传递给应用程序。但是,双击我的关联文件类型的文件,根本不会向我的可执行文件传递任何参数。当双击关联的可执行文件时,究竟会发生什么?我需要做些什么才能允许我的程序加载在windows资源管理器中双击的文件?

当我使用文件路径作为命令行参数进行调试时,我的程序运行完美,所以我不认为这是由于打开文件时出错。

c#从关联文件类型加载数据

当您双击一个文件时,shell使用"Open"谓词启动它。"打开"动词按如下方式运行应用程序:

"My Program.exe" "%1"

"%1"是您双击的文件的路径。您可以查看MDSN页面获取更多信息。

TJ Moats提供的解决方案有效。然而,我想记录下我的步骤。

  1. 要在注册表中找到正确的位置,您需要知道扩展名的ProgID。

    在解决方案资源管理器中,您可以通过右键单击项目名称,然后单击Properties> Publish> Options…>文件关联。在我的例子中,这些是我给出的设置:

    Extension = .track | Description = File Tracker Data File | ProgID = .trackfile | Icon = Tracker.ico
    
  2. 打开regedit然后导航到HKEY_CLASSES_ROOT>[ProgID]> shell> open>命令。在我的例子中,键在:

    下面
    HKEY_CLASSES_ROOT'.trackfile'shell'open'command
    
  3. 双击"(默认)"可编辑密钥数据。您将需要两样东西,可执行文件的确切路径和"%1"。在我的例子中,我制作的。exe被安装到App Data中的这个目录:

    C:'Users'Bill'AppData'Local'Apps'2.0'W82CG2C9.L4C'3Q4LH0K1.HXH'file..tion_6762072d39e56a94_0001.0000_f0f46736a74a5052'FileTracker.exe
    
  4. 现在,删除"(Default)"里面的值。将其替换为.exe文件的路径。不要包括引号。在.exe文件的路径后面加上一个空格和"%1"。必须包括%1周围的引号。

    在我的例子中,新值与下面一行完全相同:

    C:'Users'Bill'AppData'Local'Apps'2.0'W82CG2C9.L4C'3Q4LH0K1.HXH'file..tion_6762072d39e56a94_0001.0000_f0f46736a74a5052'FileTracker.exe "%1"
    

一旦新值被接受,我就不需要做任何其他事情了。现在,当我双击。track文件时,Windows资源管理器将双击文件的路径作为命令行参数传递给我的FileTracker.exe可执行文件。

但是,我需要在每次发布新版本时重复此过程,因为新的。exe将在AppData下的不同文件夹中。