我有一个部署的 ClickOnce应用程序 ,因此可以使用.application
文件的URL调用它。
我正在尝试使用queryString
类型参数(?arg1=foo&arg2=bar
)传递参数。
我无法完成这项工作。尝试了各种各样的事情,但仍然没有运气在客户端应用程序端检索它们。
这是我到目前为止所尝试的:
AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData[0]
以及我认为的旧方式
ApplicationDeployment.CurrentDeployment.ActivationUri
并且没有人允许我获取参数(大多数只是让我回到null
)
任何帮助都将不胜感激。
谢谢...!
答案 0 :(得分:2)
尝试此功能:
/// <summary>
/// parse name=value pairs from parameter string
/// </summary>
/// <returns></returns>
private static string[] GetQueryStringParameters()
{
string query = string.Empty;
if (ApplicationDeployment.IsNetworkDeployed)
{
if (ApplicationDeployment.CurrentDeployment.ActivationUri != null)
query = HttpUtility.UrlDecode(
ApplicationDeployment.CurrentDeployment.ActivationUri.Query);
}
else
{
var _params = Environment.GetCommandLineArgs();
if (_params.Length > 1)
query = HttpUtility.UrlDecode(_params[1]);
}
string[] arguments = null;
if (!string.IsNullOrWhiteSpace(query) && query.StartsWith("?"))
{
arguments = query.Substring(1).Split('&');
}
if (!string.IsNullOrWhiteSpace(query) && (arguments == null || arguments.Length == 0))
throw new Exception(
string.Format(
@"exception while decoding params: ""{0}"" ", query));
return arguments;
}
/// <summary>
/// decode "name"="value" pairs into hashtable
/// </summary>
/// <returns></returns>
private static Hashtable _decodeParams(ICollection<string> pParams)
{
var result = new Hashtable(pParams.Count);
foreach (var t in pParams)
{
string[] sParamAndValue = t.Split('=');
if (sParamAndValue.Length > 1)
{
result.Add(sParamAndValue[0], sParamAndValue[1]);
}
}
return result;
}
用法:
var allParams = new Hashtable();
var stringParams = GetQueryStringParameters();
if (stringParams != null)
allParams = _decodeParams(stringParams);
您还应该在部署应用程序之前启用选项允许将URL参数传递给应用程序
答案 1 :(得分:0)
您必须运行mageui.exe
并检查是否允许使用url参数。
Bellow屏幕显示此选项http://dontpaniclabs.blob.core.windows.net/public-images/dplblog/clickonce%20publish19.png