我有一个ClickOnce WPF应用程序,它是从网站上的页面启动的。用于调用应用程序的URL参数告诉应用程序要与哪个IP地址进行通信以及一些身份验证信息。如果从“开始”菜单而不是浏览器启动应用程序,则会将此“配置”信息写入注册表以供后续应用程序执行。
同一个网站可从多个Web服务器获得(但具有ClickOnce应用程序使用的不同数据)。
我们说我有2个网站,A& B,两者都具有相同版本的ClickOnce应用程序(v1.0.0.0)。
我可以从网站A浏览到该网站,并使ClickOnce应用程序下载,安装和执行。到目前为止没问题。
如果我现在浏览到网站B并尝试从浏览器启动ClickOnce应用程序,我会收到一个错误对话框,说明“您无法从此位置启动应用程序TestApplication,因为它已从其他位置安装”。有一个OK和Details按钮,Details按钮提供了一个很好的大日志文件,告诉我应用程序是从网站A安装的。
如果我去修改存储在注册表中的配置信息,告诉应用程序与网站B通信,然后从“开始”菜单启动应用程序,它运行正常,与网站通信以检索特定于该主机的数据。手动更改注册表设置不是可接受的解决方案。
如果我卸载应用程序然后转到网站B,应用程序将被下载,安装并运行正常,但这不是一个真正可以接受的解决方案。
我的问题是我希望用户能够从多个不同网站的浏览器启动应用程序而不会出现“你无法启动应用程序......”的问题。
我不想为每个不同的网站/网络服务器更改应用程序名称/标识。该应用程序作为更大的软件包的一部分推广到网站主机,该软件包是通用的,即不是唯一的或针对单个机器定制的。
通过更改应用程序名称/ ID,我看到了有关将同一应用程序的多个版本部署到单个客户端计算机的问题/答案,但这不是问题。
我想我的问题是,我该如何制作,以便我的应用程序可以从不同主机上的网页启动到已经部署过的网页。
答案 0 :(得分:1)
我没有答案,只是一些想法。
您是否有理由将该设置存储在注册表中?您可以将其添加为应用程序设置吗?如果可行,您可以将所有Web服务器端点存储为应用程序设置,并为用户提供一个简单的UI来选择他们想要使用的网站。
这不能解决从一台服务器安装和从另一台服务器启动的问题,但如果用户从一台服务器安装该应用程序,然后始终从开始菜单启动它,则可以正常工作。
答案 1 :(得分:1)
在安装模式和设置中,选择选项"The application is available online only"
。这将解决问题。
答案 2 :(得分:0)
我认为你的网站很混乱。您可以拥有一个ClickOnce安装位置的网站,然后您的应用程序(假设它需要完全信任)可以在任何需要的地方进行通信(例如Web A,B,C等)。
我假设您现在正在两个安装位置之间部署ClickOnce发布的副本,这就是您的问题所在。 ClickOnce构建清单并对其进行签名以防止篡改,基本上是您描述的方案。 MS不希望供应商A的代码在供应商B的网站上运行。
VS 2008 .NET 3.5SP1版本有所改进,但我还没有用它来判断你是否可以逃脱你需要的东西。我建议整体架构更改(单个安装站点,不同的配置机制)。