从数据库启动应用程序

时间:2013-01-08 00:35:34

标签: delphi

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

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

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

感谢名单

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:2)

我的建议是使用库。

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

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

当然,您的代码必须是" clean",每个.dll具有正确的启动和关闭功能。

但我怀疑它比ExecuteFromMem()更容易出错。在这方面,良好的旧加载+执行.exe文件(作为 Remy 建议)对我来说听起来更好。