将配置直接添加到C#程序集中

时间:2014-05-19 10:00:20

标签: c# .net zip

我需要开发一些应用程序,它将作为单个可执行文件分发给用户。用户应该点击“下载”之类的按钮并获取exe文件,然后执行它,并将结果上传回我的网站。应用程序不应包含任何安装程序或类似的东西,只需运行一次并获得结果。

我的应用程序有一个主要的可执行文件,如“myapp.exe”和几个数据文件,这取决于当前用户。现在我必须生成SFX zip存档,其中包含myapp.exe,数据文件和当前用户配置。当用户点击“下载”时,我正在添加用户数据进行存档并将其提供给用户。

问题是SFX存档非常枯燥且难以维护。我无法更改它的界面,我只能使用一个或两个zip库,可以创建SFX arxhives。

有没有办法使用另一个容器或将用户数据打包到我的实用程序的资源“动态”?

2 个答案:

答案 0 :(得分:0)

我已经为一个应用程序做了这个,我需要确定它是哪个用户而不需要任何凭据。基本上,在下载之前将某种令牌捆绑在应用程序中,然后发送到服务器。

根据我的发现,有两种方法:

  • 使用WiX:构建XML,调用candle + light,发送到客户端
  • 在发送给客户
  • 之前制作单个MSI和editing its database

我们选择了MSI数据库编辑,因为它的实现简单,但我最近在生产中看到了WiX,结果非常整洁。

答案 1 :(得分:0)

您可以使用Mono Cecil以编程方式更改程序集,包括其资源。在您的情况下,您可以使用它来修改程序集预先下载,以添加/修改包含特定用户数据的嵌入式资源。

byte[] userData = ...;
EmbeddedResource resource = new EmbeddedResource("UserData", ManifestResourceAttributes.Public, userData);
assembly.MainModule.Resources.Add(resource);

然后,您可以使用Assembly.GetManifestResourceNamesAssembly.GetManifestResourceStream读取添加/修改的资源(在运行时,下载后)。