2017-02-16 15 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メソッドが定義されていませんか?私はこれをc#6.0でチェックしています –

答えて

4

あなたはおそらくあなたの指令値に%1を逃した:

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

%1は、選択したファイルのパスに置き換えられます。空白を含むパスも単一の引数として渡すように二重引用符で囲みます。

+0

ありがとう、あなたのパスに '%1'を忘れてしまいました – alix54

関連する問題