2017-02-16 2 views
2

Я связан мою программу с помощью этого метода:C# Всегда 0 Аргументы

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); 
} 

Мои Program.cs:

static void Main(string[] args) 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    Application.Run(new Form1(args.TryGet(0))); 
} 

И мой Form1.cs:

string filenameArg = ""; 

public Form1(string arg) 
{ 
    InitializeComponent(); 

    filenameArg = arg; 
} 

Когда я открываю соответствующий файл (расширение), Моя программа начинается без аргументов

Не знаю, в чем проблема с этим. Что с этим не так ?

+0

Вы забыли показать нам самую важную часть: что находится внутри 'path', когда вы пишете его в реестр? –

+0

Мое приложение является внешним, означает, что можно запускать из любого места, поэтому я копирую его в appdata \ local \ myProgram всегда при запуске так что путь: ... appdata \ local \ myProgram \ prog.exe – alix54

+0

Вы показываете в program.cs string [] args; args.TryGet (0); string [] не содержит метод TryGet defintion для строки []? Я проверяю это с помощью C# 6.0 –

ответ

4

Вы, вероятно, пропустили %1 в вашем значении команды:

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

%1 заменяется на пути файла, который вы выбрали. Поместите его в двойные кавычки, чтобы пути с пробелами передавались как один аргумент.

+0

О, спасибо, забыли, что '% 1' на моем пути – alix54

Смежные вопросы