如何为每个公司部署具有唯一数据库文件的WPF应用程序?

时间:2017-11-23 08:00:33

标签: c# wpf continuous-deployment setup-deployment software-distribution

我正在尝试部署一个WPF应用程序,它附带一个数据库文件(.mdb),其中包含每个客户公司的连接字符串等。

我们有多个客户使用此设置,并且我们希望仅将包含连接字符串的db文件包含到每个公司,以便无法对代码进行反编译(或打开db文件),并且可以看到连接到所有公司的连接。 我认为,一种选择是为每个客户编译部署,但由于客户数量很高,因此必须实现自动化。

我们计划在登录后在线托管部署,以区分每家公司的用户。

但是有可能以某种方式将一个(或多个)db文件发布到部署位置,然后当每个用户下载应用程序时,是否只包含用户所在公司的相关信息?

我们的目标是实现一种简单的方法来持续部署此桌面应用程序。

我们目前正在使用ClickOnce安装程序进行测试。

更新:我不喜欢将程序放在“%LocalAppData%”中,因此我们不会使用ClickOnce安装程序,而是使用适当处理Windows UAC的安装程序。

第二次更新: 我们正在寻找最佳解决方案。不是一个快速修复,一年后必须更换,x,y和z的原因成为一个问题。 我们目前的部署包括构建我们的应用程序,压缩它们,将它们联机,以便我们每个公司的IT人员下载并覆盖其公司网络驱动器上的文件。每个技术人员必须杀死所有正在进行写入的.exe文件的进程,否则会被锁定。这是350多家公司,拥有数千名员工。因此,有很多方法可以通过自动化方式获得这种方法,这不需要每次更新构建我们的应用程序350次以上,这样就无法阻止每个公司的IT人员做任何事情。

2 个答案:

答案 0 :(得分:1)

我建议你看看Squirrel.Windows。它是一个安装程序,意味着像ClickOnce一样简单(对开发人员和用户而言),但更加灵活。

它允许添加custom events,这是在首次安装,更新,卸载或首次运行时触发的代码(在您的应用中)。这应该允许您为所有客户提供相同的安装程序和相同的应用程序,并显示菜单(或以其他方式自动执行)以设置特定于客户的设置和所有内容。

在连续部署管道中包含相对容易,几年前我写过an article about it。某些部分可能有点过时但它应该给你一个好的方向。

对于数据库本身,如果我理解正确,你将直接在机器上安装db文件,我建议你看看localdb,如果你'重新使用Entity Framework,使用Migrations从代码生成并填充数据库。

答案 1 :(得分:0)

  

但是有可能以某种方式将一个(或多个)db文件发布到部署位置,然后当每个用户下载应用程序时,是否只包含用户所在公司的相关信息?

当然,只要您在部署位置执行的后端代码中实现此功能即可。

您的网络应用或您正在使用的任何API应授权最终用户,然后仅回复与此特定用户相关的信息。因此,简而言之,您可以将可执行文件本身和所有客户特定文件存储在部署位置,并根据用户的身份和用户的身份,仅将可执行文件和单个客户特定文件(例如单个.zip文件)返回给用户。权限。

授权本身以及将客户映射到文件的功能实际上并不是桌面应用程序功能的一部分。后端负责分发和打包应用程序。