5

我有很多用户使用我的应用程序。但是,如果我在服务器上进行一些更新,并非所有人都愿意更新它(他们有时害怕他们不想习惯的更改)。

所以我推测,如何强制他们启动最新的应用程序。肯定有几种方法可以做到这一点,但我听说可以启动存储在数据库的 blob 字段中的应用程序。

有人知道如何实现吗?(我正在使用 MySQL 数据库)

谢谢

4

2 回答 2

6

在不判断有意义或无意义的情况下......
你可以使用uExecFromMem ......
这个单元中有一个 Memoryleak 可以通过添加来修复:

  ResumeThread(PI.hThread);
  Result := PI.hThread;
  FreeMem(pFile);  // added here
end; 

使用 TBlobField 的示例调用将是

var
 ms:TMemoryStream;
begin
    ms:=TMemoryStream.Create;
    try
    TBlobField(YouDBBlobField).SaveToStream(ms);
    ms.Position := 0;
    ExecuteFromMem(Application.ExeName,'',ms.Memory); // pointing to an existing executable
    finally
      ms.Free;
    end;
end;
于 2013-01-08T06:55:09.743 回答
2

我的建议是使用库。

你可以有一个小的主可执行文件(某种“启动器”),它除了启动外部.dll字段什么都不做。就像内核在运行时加载模块一样(想想 Windows 或 Linux 是如何工作的)。

然后下载更新版本的 a .dll,停止并卸载旧版本,然后加载并初始化新版本。

当然,你的代码必须是“干净的”,每个.dll.

但我怀疑它比ExecuteFromMem(). 在这方面,对我来说,良好的旧加载 +.exe文件执行(如Remy建议的那样)听起来是一个更好的选择。

于 2014-08-12T08:04:23.600 回答