【问题标题】:How do I determine the web origin folder of a ClickOnce application?如何确定 ClickOnce 应用程序的 Web 源文件夹?
【发布时间】:2018-01-25 22:27:25
【问题描述】:

我有一个部署为 ClickOnce 应用程序的 C# 应用程序。安装文件可以位于我们 Web 服务器上三个可能的文件夹之一中:Alpha、Beta 和 Production。用户访问 IE 中的适当位置以启动应用程序:www.foo.com/Alpha、www.foo.com/Beta 或 www.foo.com/Prod。在测试中,我们首先将安装文件复制到 Alpha,然后(当它通过测试时)复制到 Beta,然后(当它通过用户接受时),再复制到生产环境。没有重新编译。

我想知道的是 C# 代码是否有任何方法可以在运行时知道它是哪个版本:Alpha、Beta 或生产。它仅基于 ClickOnce 安装文件所在的文件夹。请记住,没有重新编译。

有什么线索吗?

谢谢!

【问题讨论】:

  • 您想从哪里知道位置?从应用程序代码本身或其他应用程序内部需要知道位置?
  • 你有什么尝试返回错误的位置?有几种方法可以获取程序集的位置。
  • 我需要了解应用程序代码本身。具体来说,我需要知道以便我可以选择我的应用程序要使用的 SQL Server 实例(而不是实例中的哪个数据库)。
  • 我不需要知道程序集的当前位置,我需要知道其安装程序的原始 URL(或位置)。
  • @DavidStowell:好的,在您的帖子中,您说应用程序是从 IE “启动”的。我从您的评论中推测您的意思是“已安装”,并且服务器上没有正在运行的存在。

标签: c# clickonce


【解决方案1】:

您可以使用自定义清单元素执行此操作,但需要一些构建后处理。

应用程序只需打开AppName.exe.manifest 文件上的文件流并解析XML 以定位和读取自定义元素即可访问清单文件。清单部署到与可执行文件相同的目录。

将应用程序文件复制到 Web 服务器文件夹时,只需修改清单以附加自定义元素(从技术上讲,它甚至可以是 XML 注释,通过简单的文本比较进行解析,如果您不想使用 XML解析器)。

清单修改后(在每个文件夹中),必须使用 mage.exe 签名工具重新签名。

您可以很容易地使用 shell 脚本自动执行此操作。然而,总的来说,构建不同的实际版本可能会简单得多。

【讨论】:

  • 这看起来确实需要做很多工作。同时,我希望 Alpha、Beta 和 Prod 完全相同,只是针对不同的 SQL Server 实例。我绝对不希望版本号改变。我想如果我将所有连接字符串放在应用程序中,并根据用户调用的 URL 以某种方式确定使用哪个连接字符串,我会很好。这显然是无法访问的。我卡住了重新编译吗?如果是这样,我该怎么做才能对不同类型的应用程序造成最小的损害?
  • @DavidStowell:我不明白你所说的“损害”是什么意思,但最好不要尝试在 cmets 中进行扩展讨论。您可能想发布另一个关于编译涵盖这些问题的项目的问题。
  • "Damage" 可能有点强 - 我指的是对应用程序的更改,这将使它不同于之前级别通过测试的应用程序。因此,除非其他人提出不同的意见,否则我将继续假设简单地将应用程序安装从一个文件夹移动到另一个文件夹不会被安装结果检测到,而无需付出很大的努力。因此,我将研究以最小的变化重新编译作为解决我的问题的方法。感谢您的反馈。
猜你喜欢
  • 2010-09-13
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 2015-07-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多