关联的扩展不会在双击时将文件名发送到应用程序

Associated extension doesn't send file name to application on double click

我已经通过项目属性>>发布>>选项>>文件关联在Visual Studio 2013.

我知道如果我将一个或多个文件拖放到我的应用程序 (.exe) 上,我可以通过参数捕获所有路径 (string[] args) 我的 Main 方法( 位于 Program.cs)。但是当我打开关联文件( 启动我已发布和安装的应用程序)时,文件的路径没有作为参数传递给我的 Main 方法。

如何获取启动我的应用程序的文件的路径?

顺便说一句,除了使用 Visual Studio 的 "File Associations" 之外,我还可以使用注册表 (HKEY_CLASSES_ROOT) 将文件扩展名与我的应用程序相关联特征。您最推荐哪种方法,为什么?

检查注册表编辑器:

  • [Win+R],输入"regedit"
  • 打开HKEY_CLASSES_ROOT
  • 打开 .yourfileextension 密钥
  • 在存储可执行文件路径的密钥中检查是否有 %%1
  • 如果不是右击并像这样编辑它:"C:\Path\to\Executable\executable.exe" %%1

我实际上用下面的代码解决了我自己的问题:

        RegistryKey command, defaultIcon, extension;
        // Create Keys
        command = Registry.CurrentUser.CreateSubKey(@"Software\Classes\APP NAME\shell\open\command");
        defaultIcon = Registry.CurrentUser.CreateSubKey(@"Software\Classes\APP NAME\DefaultIcon");
        extension = Registry.CurrentUser.CreateSubKey(@"Software\Classes\.EXTENSION");

        // Create Values
        command.SetValue("", "\"" + Application.ExecutablePath + "\" %1", RegistryValueKind.String);
        defaultIcon.SetValue("", "ICON PATH", RegistryValueKind.String);
        extension.SetValue("", "APP NAME", RegistryValueKind.String);

APP NAME 是我放置应用程序名称的地方, EXTENSION 是我放置要与我的应用程序关联的扩展名的地方,ICON PATH 是我想要关联的图标文件的路径文件。

ExecutablePath 末尾的 %1 使双击关联文件的路径作为参数传递给我的应用程序的 Main 方法。