我有很多用户使用我的应用程序。但是,如果我在服务器上进行一些更新,并非所有人都愿意更新它(他们有时害怕他们不想习惯的更改)。
所以我推测,如何强制他们启动最新的应用程序。肯定有几种方法可以做到这一点,但我听说可以启动存储在数据库的 blob 字段中的应用程序。
有人知道如何实现吗?(我正在使用 MySQL 数据库)
谢谢
我有很多用户使用我的应用程序。但是,如果我在服务器上进行一些更新,并非所有人都愿意更新它(他们有时害怕他们不想习惯的更改)。
所以我推测,如何强制他们启动最新的应用程序。肯定有几种方法可以做到这一点,但我听说可以启动存储在数据库的 blob 字段中的应用程序。
有人知道如何实现吗?(我正在使用 MySQL 数据库)
谢谢
在不判断有意义或无意义的情况下......
你可以使用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;
我的建议是使用库。
你可以有一个小的主可执行文件(某种“启动器”),它除了启动外部.dll
字段什么都不做。就像内核在运行时加载模块一样(想想 Windows 或 Linux 是如何工作的)。
然后下载更新版本的 a .dll
,停止并卸载旧版本,然后加载并初始化新版本。
当然,你的代码必须是“干净的”,每个.dll
.
但我怀疑它比ExecuteFromMem()
. 在这方面,对我来说,良好的旧加载 +.exe
文件执行(如Remy建议的那样)听起来是一个更好的选择。