2009-11-25 213 views
1

我有一个ClickOnce WPF应用程序,它是从网站上的页面启动的。用于调用应用程序的URL参数告诉应用程序使用什么IP地址进行通信,以及一些认证信息。如果从“开始”菜单而不是浏览器启动应用程序,则此“配置”信息将写入注册表以供后续应用程序执行。ClickOnce应用程序部署困境

多个Web服务器可以使用同一个网站(但ClickOnce应用程序使用不同的数据)。

让我们说我有2个网站,A & B,它们都有我的ClickOnce应用程序(v1.0.0.0)的相同版本。

我可以从网站A浏览该网站,并使ClickOnce应用程序下行,安装并执行。到目前为止没有问题。

如果我现在浏览到网站B并尝试从浏览器启动ClickOnce应用程序,则会显示一个错误对话框,指出“您不能从此位置启动应用程序TestApplication,因为它已从其他位置安装”。有一个确定和详细信息按钮,详细信息按钮给出了一个不错的大日志文件,告诉我应用程序是从网站A安装的。

如果我去修改存储在注册表中的配置信息以告诉应用程序与网站B,然后从开始菜单启动应用程序,它运行良好,与网站通信以检索特定于该主机的数据。手动更改注册表设置不是可接受的解决方案。

如果我卸载应用程序,然后转到网站B,应用程序被下载,安装并运行正常,但这不是一个真正可接受的解决方案。

我的问题是,我希望用户能够从多个不同的网站从浏览器启动应用程序,而不会得到这个“你不能启动应用程序...”的问题。

我不想为每个不同的网站/网络服务器更改应用程序名称/标识。该应用程序作为较大的软件包的一部分推出到网站主机上,该软件包是通用的,即不是唯一的或适合于单独的机器。

我已经看到有关通过更改应用程序名称/ ID将同一应用程序的多个版本部署到单个客户端机器的问题/答案,但这不是真正的问题。

我想我的问题是,我该如何使它所以我的应用程序可以从网页上推出不同的主机它已经从部署的一个上。

回答

1

我没有一个答案,只是几个想法。

是否有你为什么要在注册表中存储设置的原因?你可以将它作为应用程序设置添加吗?如果可行,您可以将所有Web服务器端点存储为应用程序设置,并为用户提供一个简单的用户界面来选择他们想要使用的网站。

这并没有解决从一台服务器上安装和从其他服务器启动的问题,但如果用户从一台服务器安装的应用程序,然后总是从开始菜单中启动它会工作。

+0

使用注册表存储信息的原因是,它可以很容易地存储在每个用户的基础上,即在HKEY_CURRENT_USER下,而不是使用数据文件,并且必须把它放在用户指定的位置。 无论如何,可以提供一个UI元素来允许设置主机进行通信 - 但正如您所观察到的那样,这对于尝试从不同的Web服务器“启动”应用程序的问题没有帮助。 – LeeC 2009-11-30 14:04:57

0

我认为你让你的网站感到困惑。您可以将一个网站作为您的ClickOnce安装位置,然后您的应用程序(假设它需要完全信任)可以在任何需要的地方进行通信(例如Web A,B,C等)。

我假设您现在在两个安装位置之间部署ClickOnce发布的副本,其中存在您的问题。 ClickOnce生成一个清单并签名以防止篡改,基本上就是您所描述的场景。 MS不希望供应商A的代码在供应商B的网站上运行。

VS 2008 .NET 3.5SP1发行版已经有所改进,但我还没有玩过它来告诉你是否可以逃避你的需要。我建议整体架构更改(单个安装站点,不同的配置机制)。

1

在安装模式和设置中,选择选项"The application is available online only"。这将解决问题。

相关问题