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

问题描述 投票:1回答:3

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

我想向他们展示我们可以使用ClickOnce在同一位置发布,只需为每个客户端的安装程序添加查询字符串参数。

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

我遇到的问题是上述(“ ID = 1234 ...”)没有传递给“ myapplication.application”。相反,正在发生的情况是,该应用程序已成功安装,并且首次使用激活上下文运行,但是“ ActivationUri”不包含任何查询字符串值。

是否可以将查询字符串值从安装者的URL传递到应用程序的启动URL?如果是这样,如何?

installer clickonce query-string
3个回答
3
投票

经过大量搜索(并讨论),答案很简单,即当前版本的ClickOnce无法那样工作。安装程序不会在首次运行时将URL传递到应用程序。

以下是我为解决此问题所做的事情(效果很好)。

  • 更改我的安装程序包,使所有必需的文件都解压缩并丢失(与使用CAB文件或将其嵌入安装程序有关。)]] >>

  • 制作一个ASP.NET应用程序(使用路由进行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”(或其他内容)。

代替使用5位数的ID,您可以使用GUID ...由您决定。

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

目前,我们有一些占位符,我们可以交换掉它们,这样就可以轻松地为所需的客户端自定义安装程序。

示例:在app.config文件中,我们具有displayName =“ {OrgName}”,该名称将自动替换为数据库中的值之一。

对我来说,“http://mysite.com/myapplication.application

?id = 1234-56-7890”似乎可以解决问题。

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

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

  1. 将应用程序/下载/安装程序链接指向应用程序(具有.application扩展名,而不是“ setup.exe”)
  2. 将此功能添加到ClickOnce应用程序中以检索querystring参数集合:
  3. 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


0
投票

对我来说,“http://mysite.com/myapplication.application


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.