【问题标题】:Create a text file on client-side programatically以编程方式在客户端创建文本文件
【发布时间】:2010-02-02 07:59:07
【问题描述】:

我们有一个 Ruby-on-rails 服务器端部署,需要允许用户在他们的计算机上下载预编译的自解压 Windows EXE 文件。

我们还需要动态生成一个文本文件(基于用户 ID)并将其部署在客户端计算机上 EXE 可以找到的某个位置。

我们有两个选择:

  1. 在 linux 服务器上生成此文本文件并以某种方式生成此文本文件?将其嵌入到 Windows EXE 中。这似乎有些牵强
  2. 让用户下载静态 EXE 并以某种方式获取存储在客户端计算机上的动态文本信息(通过不可见的下载、cookie、vbscript 或客户端的 javascripting)。

请注意,由于与用户体验相关的问题(即丑陋的 UX,下载可能存储在不同的路径等)。

我不是一个网络开发人员,但在 Google 上花了几分钟后,我认为这两种解决方案都充满了问题,而且很丑陋。

有人有聪明的主意吗?

【问题讨论】:

    标签: ruby-on-rails cookies client-server client-side


    【解决方案1】:

    可以简单地将文本文件附加到 exe。这些额外的字节将被操作系统加载程序忽略,但您的程序将能够获取它们。这就是自解压 EXE 的工作原理。

    exe 在运行时打开args[0](这是它自己的可执行文件)并从末尾开始寻找必要的字节数,然后读取文本。

    您的网络脚本可以直接在响应中提供 exe 的字节,然后在同一响应中发送文本文件。

    如果文本不是固定长度,您还可以在流的最后将文本的长度作为整数发送。然后,exe 首先读取这个固定大小的长度字段,然后从末尾开始寻找适当数量的字节以读取可变部分。

    将数据附加到EXE的各种examples [msdn]显示从头开始解析EXE结构以查找数据开始的位置。只需将最后数据的长度附加到 EXE 即可避免需要了解 EXE 结构。

    【讨论】:

    • 感谢您的详细回复。我不知道你可以按照你的建议去做,所以知道这一点非常有用。但是,我认为下面 Mark Redman 提出的在 linux 机器上打包一个自解压 exe 的建议听起来是一种简单、优雅的方法来解决我的问题,所以我将继续这样做。我还在 Stackoverflow 上找到了另一个类似的线程,它通过指向我可以使用的工具的指针进一步讨论了这个非常相同的建议。 stackoverflow.com/questions/818482/…
    【解决方案2】:

    几个想法:

    1) 将要解压的服务器文件上的exe和文本文件压缩到同一位置(创建一个自解压的zip(exe)会更好。

    2) 用户下载 exe 后提供 KEY/PIN CODE。当应用程序第一次运行时,没有检测到文本文件,它会询问 PIN,然后 exe 调用 web 服务并下载信息以保存到文本文件中。例如,这可以是一个 Guid。

    【讨论】:

    【解决方案3】:

    可以将文本文件嵌入到可执行文件as a resource中。

    【讨论】:

      猜你喜欢
      • 2010-12-11
      • 2018-09-08
      • 2013-02-27
      • 2017-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-15
      相关资源
      最近更新 更多