ClickOnce:如何通过安装程序*将查询字符串值传递给我的应用程序*?

时间:2009-09-07 16:00:28

标签: installer clickonce query-string

我的公司目前为所有客户构建单独的MSI,即使该应用程序全面100%相同(只有一个例外,app.config中的ID)。

我想告诉他们我们可以使用ClickOnce一次发布,只需为每个客户端的安装程序添加一个查询字符串参数。

示例: http://mysite.com/setup.exe?ID=1234-56-7890

我遇到的问题是上面的内容(“ID = 1234 ...”)没有传递给“myapplication.application”。相反的是,应用程序正在成功安装,并且它第一次运行激活上下文,但“ActivationUri”不包含任何查询字符串值。

有没有办法将查询字符串值 FROM INSTALLER URL 传递给应用程序的启动URL?如果是这样,怎么样?

3 个答案:

答案 0 :(得分:3)

经过大量搜索(和讨论)后,答案很简单,当前版本的ClickOnce不会那样。安装程序首次运行时不会将URL传递给应用程序。

以下是我为解决方法所做的工作(效果很好)。

  • 更改我的安装程序包,使所有必需的文件解压缩并松散(与使用CAB文件或将其嵌入安装程序中相关)。

  • 制作一个ASP.NET应用程序(使用Routing for URL处理),侦听对“mysite.com/Installer/00123/Setup.exe”的请求

    • 注意:路由应该监听“/ Installer / {ID} / *”,其中{ID}是5位数。
    • 实际上没有名为“00123”的目录,而是我使用ASP.NET路由来接收这些请求,然后将其映射到我的实际目录中,其中包含安装程序文件。
  • 然后我劫持了请求(解析setup.exe以找到嵌入式URL,告诉安装程序在哪里找到其余文件......然后用请求URL替换“/ 00000 /”用户去了 - 在这种情况下“00123”。

    • 在请求每个文件时,我知道要发送的文件的“版本”,因为ClickOnce安装程序将查找“mysite.com/Installer/00123/SomeFile.dll”(或其他)。

您可以使用GUID代替使用5位数ID ...这取决于您。

此解决方案适用于我们的组织...我们目前有37个客户需要对其安装程序包进行独特的自定义,但我们只需要实际构建和发布 ONE 安装程序包,并只需使用上面的劫持方法。

此时我们有替换的占位符,以便为我们想要的客户端定制安装程序。

示例:在app.config文件中,我们有displayName =“{OrgName}”,它会被数据库中的一个值自动替换。

答案 1 :(得分:0)

对我来说,“http://mysite.com/ myapplication.application ?id = 1234-56-7890”似乎可以解决问题。

答案 2 :(得分:0)

我知道这已经过时了,但是我只想提供当前的解决方案。

要在ClickOnce应用程序中检索查询字符串参数:

  1. 将app / download / setup链接指向应用程序(具有.application扩展名),而不是“ setup.exe”
  2. 将此函数添加到ClickOnce应用程序中以检索querystring参数集合:
private NameValueCollection GetQueryStringParameters()
{
    NameValueCollection nameValueTable = new NameValueCollection();

    if (ApplicationDeployment.IsNetworkDeployed)
    {
        string queryString = ApplicationDeployment.CurrentDeployment.ActivationUri.Query;
        nameValueTable = HttpUtility.ParseQueryString(queryString);
    }

    return (nameValueTable);
}
  1. 然后获取查询字符串参数值:
var querystringParams = GetQueryStringParameters();
string param_value = querystringParams["param_name"];
  1. 别忘了使用方法:
using System.Collections.Specialized;
using System.Deployment.Application;
using System.Web;

来源:https://docs.microsoft.com/en-us/visualstudio/deployment/how-to-retrieve-query-string-information-in-an-online-clickonce-application?view=vs-2019