Installation ClickOnce:如何通过安装程序*将查询字符串值传递给我的应用*?
我的公司目前为我们的所有客户构建单独的MSI,即使该应用程序在所有方面都是100%相同的(只有一个例外,app.config中有一个ID) 我想向他们展示,我们可以使用ClickOnce一次性发布,只需为每个客户端的安装程序添加一个查询字符串参数 示例: 我遇到的问题是,上面的(“ID=1234…”)没有传递给“myapplication.application”。相反,该应用程序正在成功安装,并且第一次使用激活上下文运行,但“ActivationUri”不包含任何查询字符串值 是否有方法将查询字符串值从安装程序URL传递到应用程序的启动URL?如果是这样的话,怎么做?对我来说,“myapplication.application?id=1234-56-7890”似乎起到了作用。经过大量搜索(和讨论),答案很简单,ClickOnce的当前版本不是这样工作的。安装程序在第一次运行时不会将URL传递到应用程序上 以下是我为解决问题所做的工作(效果非常好)。Installation ClickOnce:如何通过安装程序*将查询字符串值传递给我的应用*?,installation,clickonce,query-string,Installation,Clickonce,Query String,我的公司目前为我们的所有客户构建单独的MSI,即使该应用程序在所有方面都是100%相同的(只有一个例外,app.config中有一个ID) 我想向他们展示,我们可以使用ClickOnce一次性发布,只需为每个客户端的安装程序添加一个查询字符串参数 示例: 我遇到的问题是,上面的(“ID=1234…”)没有传递给“myapplication.application”。相反,该应用程序正在成功安装,并且第一次使用激活上下文运行,但“ActivationUri”不包含任何查询字符串值 是否有方法将查询
- 更改我的安装程序包,使所有必需的文件都未压缩和松散(与使用CAB文件或将其嵌入安装程序类似)
- 制作一个ASP.NET应用程序(使用URL处理路由)侦听对“mysite.com/Installer/00123/Setup.exe”的请求
- 注意:路由应该侦听“/Installer/{ID}/*”,其中{ID}是5位数字
- 实际上没有名为“00123”的目录,而是使用ASP.NET路由来接收这些请求,然后将其映射到包含安装程序文件的实际目录
- 然后我劫持该请求(解析setup.exe以找到嵌入式URL,该URL告诉安装程序在何处查找其余文件…然后我将“/00000/”替换为用户访问的请求URL,在本例中为“00123”
- 由于每个文件都被请求,我知道要发送的文件的“版本”,因为ClickOnce安装程序将查找“mysite.com/Installer/00123/SomeFile.dll”(或其他任何内容)
示例:在app.config文件中,我们有displayName=“{OrgName}”,它被数据库中的一个值自动替换。我知道这已经过时,但我只是想提供当前的解决方案 要在ClickOnce应用程序中检索查询字符串参数,请执行以下操作:
来源:URL确实会发送到应用程序,但不会发送到安装程序。您对以下内容有何建议
private NameValueCollection GetQueryStringParameters()
{
NameValueCollection nameValueTable = new NameValueCollection();
if (ApplicationDeployment.IsNetworkDeployed)
{
string queryString = ApplicationDeployment.CurrentDeployment.ActivationUri.Query;
nameValueTable = HttpUtility.ParseQueryString(queryString);
}
return (nameValueTable);
}
var querystringParams = GetQueryStringParameters();
string param_value = querystringParams["param_name"];
using System.Collections.Specialized;
using System.Deployment.Application;
using System.Web;