我有两个最初使用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对象才能到达。
有什么想法吗?
答案 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
}
}
}