好的,所以我已经就这个问题做了很多研究,我似乎无法找到真正有用的东西,所以我希望这里丰富的知识可以帮助你。
背景
我在Visual Studio 2012中开发了一个C#.net应用程序,该应用程序将分发给全国各地的许多计算机。设置应用程序,以便它查看许多设置的.exe.config文件。这不是问题。问题是,我的程序还依赖文件目录,文本和.dll文件。
问题
所以我的问题是,有没有办法在C#中创建一个更新程序以与我的应用程序集成,这样它不仅可以更新.exe,如果有新版本,还可以比较支持文件的版本和必要时更新它们?
此外,是否可以创建一个安装程序来创建这些依赖目录和文件,而无需将它们嵌入到应用程序本身中?
答案 0 :(得分:2)
我亲自对此进行如下处理:
通过使用Shadow copied assemblies,您应该能够就地替换框架打开的任何文件,而不必担心锁定。您可能需要处理自己以不同方式打开的文件(例如,如果您在代码中打开文本文件并且需要更新,则需要先关闭句柄)
示例网络服务响应:
{"Version": {"Major": 1, "Minor": 0, "Revision": 0, "Build": 0},
"Manifest": "/Version/1.0.0.0"}
{"Files": [{"/SomeDll.dll", "Hash": "AAAAAAAAAAAA", "Url": "/Version/1.0.0.0/SomeDll.dll"},
{"/MainApp.exe", "Hash": "AAAAAAAAAAAB", "Url": "/Version/1.0.0.0/MainApp.exe"},
...
],
"ReleaseNotes": "Blah"}
当然,如果应用程序和支持文件的每个版本都很小,您可能只想一次性下载清单和相关文件〜(zip文件?),而不是逐个更新单个文件。
这种方法的另一个好处是,理论上你可以随时前进/后退到你喜欢的任何版本(假设对数据库模式没有依赖性/类似的随时间变化)。
在执行任何自动更新过程时,您需要考虑安全性。您可以有效地下载新代码并使用与应用程序相同的权限运行它(很可能与当前用户相同)。至少,确保您使用SSL并验证您提供的证书!如果您不这样做,则用户和您的服务器之间的任何人都可以替换他们自己的软件。熟悉Man in the Middle攻击的方式,以便你可以防御它们。
答案 1 :(得分:0)
你可以测试Squirrel(一个WiX包装器):