質問: (new Uri(url)).Query; MessageBox.Show(queryString); こちらで確認しても結果、引数はありませんでした。 ### 補足情報(言語/FW/ツール等のバージョンなど) Visual Studio 2017 C# 申し訳ありませんが、何か解決方法をご存知であればご教示いただけますと幸いです。
回答: こんにちは。 結論からですと、ファイルの拡張子に関連付けたファイルを起動した時に、 ClickOnceでは以下にファイル名が入っています。 ``` AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData0] ``` こちらの情報を参考にさせていただきました。 stack overflow: How to get command line from a ClickOnce application? 以下は、既にご存知かもしれませんが、参考の為に ClickOnce アプリケーションのファイルの関連付けを作成する 動作の確認の為にテストプロを作りました。拡張子"tx4"に関連付けて、*.tx4なファイルを ダブルクリックしたときに引数を出力するClickOnce対応のコンソールプログラムです。 AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData は関連付けでの起動では無い場合にはnullになっているので、適時、スキップする必要があります。 コードを示します。下の方はSystem.Environment.GetCommandLineArgs()等との 比較の為に書いただけですので気にしないでください。 Visual Studio 2017 Professionalで作成し、Windows 7 64ビット版で確認しています。 ``` using System; namespace ClickOnceTest01 { class Program { static void Main(string[] args) { Console.WriteLine("Main.START"); Console.ReadKey(); if (AppDomain.CurrentDomain.SetupInformation.ActivationArguments != null) { // ClickOnceでの起動の場合 var data = AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData; if (data != null) { // ファイル名は AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData[0] // に入っている。 Console.WriteLine("ClickOnce: " + data[0]); // 確認の為、全要素を出力 for (int i = 0; i < data.Length; i++) { string msg = string.Format("ClickOnce data#{0}={1}", i, data[i]); Console.WriteLine(msg); } } } // 普通に Main.args[] if (args != null) { for (int i = 0; i < args.Length; i++) { Console.WriteLine("Main.args: " + args[i]); } } // Environment.GetCommandLineArgs var args2 = System.Environment.GetCommandLineArgs(); for (int i = 0; i < args2.Length; i++) { Console.WriteLine("GetCommandLineArgs:" + args2[i]); } Console.WriteLine("Main.END"); Console.ReadKey(); } } } ``` 関連付けは、ClickOnceの設定画面で行っています。 ![イメージ説明 C:\project\test\ClickOnceTest01\publish\testdata.tx4 をダブルクリックしたとき の実行結果です。"Main.START"の次の行で、引数のファイル名を出力しています。 !イメージ説明