AppDomain.CurrentDomain.SetupInformation.ActivationArguments为一个ClickOnce应用程序返回null,但不返回另一个

时间:2015-01-21 17:46:53

标签: c# .net winforms

我有两个最初使用Visual Studio Express 2008(C#)开发的WinForm ClickOnce应用程序,现在使用VS Express 2013进行维护。两者都针对.NET Framework 4 Client Profile。

请考虑下面的代码,我尝试通过在InitializeComponent()之后插入一行代码并单击VS中的Start以运行和调试应用程序来获取ActivationArguments:

public Form1()
{ 
    InitializeComponent();                
    ActivationArguments actArgs = AppDomain.CurrentDomain.SetupInformation.ActivationArguments;
    etc...
}

我很难过为什么一个应用程序为ActivationArguments返回null而另一个应用程序返回预期的对象。两者都是简单的WinForm应用程序,简单的C#,相同的部署设置,没什么特别的。目标是最终获得ActivationData,但我首先需要一个ActivationArguments对象才能到达。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

以下内容适用于C#WinForms App .Net 4.5,它使用ClickOnce Publishing为设置为" ..的应用程序也可离线使用。"在项目的发布设置中。

1)通过向main()

添加args,可以在program.cs中读取在Project Settings中指定或从控制台传递的CommandLine参数。
static void Main(string[] args) // in program.cs, args[0] is first argument

或使用

string[] args = Environment.GetCommandLineArgs(); // in Form1.cs e.g. in Form1_Load, args[1] is first argument

2)由例如传递的CommandLine参数在资源管理器/桌面中双击相关文件可以这样读取:

using System.Deployment.Application;

// e.g. in Form1_Load
if (ApplicationDeployment.IsNetworkDeployed)
{
    string[] activationData = AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData;
    if (activationData != null && activationData.Length > 0)
    {
        string[] args = activationData[0].Split(new char[] { ',' });
        if (args.Length > 0)
        {
            // args[0] is first argument
        }
    }
}