こんにちは。
結論からですと、ファイルの拡張子に関連付けたファイルを起動した時に、
ClickOnceでは以下にファイル名が入っています。
AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData[0]
こちらの情報を参考にさせていただきました。
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ビット版で確認しています。
C#
1
2using System;
3
4namespace ClickOnceTest01
5{
6 class Program
7 {
8 static void Main(string[] args)
9 {
10 Console.WriteLine("Main.START");
11 Console.ReadKey();
12
13 if (AppDomain.CurrentDomain.SetupInformation.ActivationArguments != null)
14 {
15 // ClickOnceでの起動の場合
16 var data = AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData;
17 if (data != null)
18 {
19 // ファイル名は AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData[0]
20 // に入っている。
21 Console.WriteLine("ClickOnce: " + data[0]);
22
23 // 確認の為、全要素を出力
24 for (int i = 0; i < data.Length; i++)
25 {
26 string msg = string.Format("ClickOnce data#{0}={1}", i, data[i]);
27 Console.WriteLine(msg);
28 }
29 }
30 }
31
32 // 普通に Main.args[]
33 if (args != null)
34 {
35 for (int i = 0; i < args.Length; i++)
36 {
37 Console.WriteLine("Main.args: " + args[i]);
38 }
39 }
40
41 // Environment.GetCommandLineArgs
42 var args2 = System.Environment.GetCommandLineArgs();
43 for (int i = 0; i < args2.Length; i++)
44 {
45 Console.WriteLine("GetCommandLineArgs:" + args2[i]);
46 }
47
48 Console.WriteLine("Main.END");
49 Console.ReadKey();
50 }
51 }
52}
53
54
関連付けは、ClickOnceの設定画面で行っています。
C:\project\test\ClickOnceTest01\publish\testdata.tx4 をダブルクリックしたとき
の実行結果です。"Main.START"の次の行で、引数のファイル名を出力しています。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/29 06:44
2017/09/29 07:10 編集