C# 如何在clickonce安装程序中请求连接字符串?

C# 如何在clickonce安装程序中请求连接字符串?,c#,connection-string,clickonce,C#,Connection String,Clickonce,是否仍需要配置clickonce,以便提示用户填写应用程序的连接字符串 比如,我将为许多用户部署我的应用程序,在每种情况下,sql server都将获得一个实例名,可能是不同的,主机肯定是不同的。那么,我如何配置它来安装正确的连接字符串呢?这里有两种方法——在启动应用程序时检查应用程序设置中是否显示了连接字符串;如果不是,请用户提供一个(请确保将应用程序设置存储在独立存储中) 如果您希望自动发送,并且您的应用程序托管在web服务器上,则可以将连接字符串作为激活url的一部分传递(而不是/Clic

是否仍需要配置clickonce,以便提示用户填写应用程序的连接字符串


比如,我将为许多用户部署我的应用程序,在每种情况下,sql server都将获得一个实例名,可能是不同的,主机肯定是不同的。那么,我如何配置它来安装正确的连接字符串呢?

这里有两种方法——在启动应用程序时检查应用程序设置中是否显示了连接字符串;如果不是,请用户提供一个(请确保将应用程序设置存储在独立存储中)

如果您希望自动发送,并且您的应用程序托管在web服务器上,则可以将连接字符串作为激活url的一部分传递(而不是/ClickOnce.application将用户直接发送到页面/ClickOnce.application?ConnectionString=My_Encoded_ConnectionString),并且从应用程序本身可以这样读取

  try {
    if (ApplicationDeployment.CurrentDeployment == null ||
      ApplicationDeployment.CurrentDeployment.ActivationUri == null)
      return null;
  } catch {
    // application was not activated from the web
    return null;
  }

  Uri uri = ApplicationDeployment.CurrentDeployment.ActivationUri;
  string query = uri.Query;
  if (string.IsNullOrEmpty(uri.Query))
    throw new UIException("Activation Uri is empty.");

  Regex regex;
  Match match;
  regex = new Regex(@".*ConnectionString=(?<ConnectionString>([A-Z0-9\+/=:%\._-]+))", RegexOptions.IgnoreCase);
  match = regex.Match(uri.Query);
  if (match == null || !match.Success) {
    throw new UIException("ConnectionString not recognized as part of activation Uri.");
  }
  return HttpUtility.UrlDecode(match.Groups["ConnectionString"].Value);
试试看{
如果(ApplicationDeployment.CurrentDeployment==null||
ApplicationDeployment.CurrentDeployment.ActivationUri==null)
返回null;
}抓住{
//应用程序未从web激活
返回null;
}
Uri=ApplicationDeployment.CurrentDeployment.ActivationUri;
stringquery=uri.query;
if(string.IsNullOrEmpty(uri.Query))
抛出新的UIException(“激活Uri为空”);
Regex-Regex;
匹配;
regex=newregex(@“*ConnectionString=(?([A-Z0-9\+/=:%\.\.\-]+)”,RegexOptions.IgnoreCase);
match=regex.match(uri.Query);
if(match==null | |!match.Success){
抛出新的UIException(“ConnectionString未被识别为激活Uri的一部分”);
}
返回HttpUtility.UrlDecode(match.Groups[“ConnectionString”].Value);

如果我将其放在激活url上,并允许用户脱机执行,它可能会出错,对吗?我想最好是在第一次申请的时候我问它。。。谢谢你说的对。您可以组合这些方法(即,如果应用程序是web激活的,则将连接字符串存储在您的设置中,然后从中读取)。至少第一次运行应该是web激活的(如果您仅在web服务器上托管安装)。我也必须使其脱机可用。。因此,我认为最好只使用一种方法。谢谢^^