C# C总是0个参数

C# C总是0个参数,c#,winforms,arguments,associations,C#,Winforms,Arguments,Associations,我已将我的程序与此方法关联: public static void CreateFileAssociation(string extension, string key, string description, string path) { RegistryKey classes = Registry.ClassesRoot; RegistryKey extensionKey = classes.CreateSubKey(extension); extensionKey.

我已将我的程序与此方法关联:

public static void CreateFileAssociation(string extension, string key, string description, string path)
{
    RegistryKey classes = Registry.ClassesRoot;
    RegistryKey extensionKey = classes.CreateSubKey(extension);
    extensionKey.SetValue(null, key);

    RegistryKey typeKey = classes.CreateSubKey(key);
    typeKey.SetValue(null, description);

    RegistryKey shellKey = typeKey.CreateSubKey("shell");
    RegistryKey shellOpenKey = shellKey.CreateSubKey("open");
    RegistryKey shellOpenCommandKey = shellOpenKey.CreateSubKey("command");
    shellOpenCommandKey.SetValue(null, path);
}
My Program.cs:

和我的Form1.cs:

当我打开关联的fileextension时,我的程序启动时没有参数

不知道这有什么问题。有什么问题吗?

您可能在命令值中遗漏了%1:

HKEY_CLASSES_ROOT\...\shell\open\command = ...appdata\local\myProgram\prog.exe "%1"

%1将被所选文件的路径替换。将它放在双引号中,这样带空格的路径也可以作为单个参数传递。

您忘了向我们显示最重要的部分:当您将路径写入注册表时,路径内部是什么?我的应用程序是外部的,表示可以从任何位置运行,因此我将其复制到appdata\local\myProgram始终处于启动状态,因此路径为:…appdata\local\myProgram\prog.exe您在program.cs string[]args中显示的;args.TryGet0;字符串[]不包含字符串[]上的定义TryGet方法?我正在用c6检查这个。0@DaveSTryGet是我尝试从索引中获取值的扩展方法,是一种安全的方法:
string filenameArg = "";

public Form1(string arg)
{
    InitializeComponent();

    filenameArg = arg;
}
HKEY_CLASSES_ROOT\...\shell\open\command = ...appdata\local\myProgram\prog.exe "%1"