ClickOnce Url参数丢失

时间:2014-01-31 03:56:49

标签: c# .net url query-string clickonce

我有一个部署的 ClickOnce应用程序 ,因此可以使用.application文件的URL调用它。

我正在尝试使用queryString类型参数(?arg1=foo&arg2=bar)传递参数。

我无法完成这项工作。尝试了各种各样的事情,但仍然没有运气在客户端应用程序端检索它们。

这是我到目前为止所尝试的:

 AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData[0]

以及我认为的旧方式

 ApplicationDeployment.CurrentDeployment.ActivationUri

并且没有人允许我获取参数(大多数只是让我回到null

任何帮助都将不胜感激。

谢谢...!

2 个答案:

答案 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